效果圖,素材是網(wǎng)上隨便拉的
這是運(yùn)行后的Hierarchy的界面,其中最下面的Item是放在攝像機(jī)不能拍到的位置,當(dāng)做預(yù)設(shè)體,每個(gè)Item都有Toggle組件,在Grid上有Toggle Group 組件,并且將Itme上的Toggle組件中Group設(shè)置為Grid痕鳍,這實(shí)現(xiàn)了點(diǎn)了一個(gè)之后,其他不會(huì)高亮。Grid上有組件 Grid Layout Group,該組件實(shí)現(xiàn)了當(dāng)創(chuàng)建Item,并且將父物體設(shè)置為Grid后能夠自動(dòng)排版
這里我們需要寫三個(gè)類,一個(gè)是自己捏造的數(shù)據(jù)類,放在Item上獲取各種UI的類,還有能夠創(chuàng)建Item并且能夠?qū)tem進(jìn)行管理的類
public class ItemData//這個(gè)類存放的是數(shù)據(jù)
{
public int _starNum;//星星的數(shù)量(本來是想找星星的,現(xiàn)在就隨便將就一下)
public string _icon;//這是圖片名字
public string _itemName;//關(guān)卡的名字
public string _itemNum;//第幾關(guān)
}
item上的類,用來獲取item上的UI控件
public class Item : MonoBehaviour
{? ??
public Image _star1;? ??
public Image _star2;? ??
public Image _star3;? ??
public Image _icon;? ??
public Text _levelNum;? ??
public Text _levelName;? ??
void initializeItem()? ??
{? ? ? ??
_star1 = transform.Find("StarGroup/star1").GetComponent<Image>();? ? ? ?
?_star2 = transform.Find("StarGroup/star2").GetComponent<Image>();? ? ? ??
_star3 = transform.Find("StarGroup/star3").GetComponent<Image>();
?_icon = transform.Find("Icon").GetComponent<Image>();? ? ? ??
_levelName = transform.Find("Levelname/name").GetComponent<Text>();? ? ? ??
_levelNum = transform.Find("Levelname/Lv").GetComponent<Text>();
}
void Awake()
{
initializeItem();
}
}
這是個(gè)管理Item創(chuàng)建的類
public class MainMgr : MonoBehaviour?
{? ??
GameObject item;? ??
Transform Parent; ? ?//這里需要得到Gird的Transform
List<ItemData> dataGroup = new List<ItemData>();? ?
void Awake()? ??
{? ? ? ??
CreateData();? ? ? ??
item = transform.Find("Item").gameObject; ? ? ? ?//獲得一開始放在攝像機(jī)外的游戲?qū)ο?當(dāng)做預(yù)設(shè)體
Parent = transform.Find("Grid");? ? //保存Gird的Transform
}? ??
void CreateData() ? ?//創(chuàng)建自己捏造的數(shù)據(jù)
{? ? ? ?
?dataGroup.Clear();//確保這個(gè)List沒有其他數(shù)據(jù) ? ? ? ?
ItemData itemdata = new ItemData();? ? ? ??
itemdata._icon = "1 (5)";? ? ? ?
itemdata._itemName = "小樹林";? ? ? ??
itemdata._itemNum = "第一關(guān)";? ? ? ??
itemdata._starNum = 3;? ? ? ??
dataGroup.Add(itemdata);? ? ? ??
ItemData itemdata1 = new ItemData();? ? ? ??
itemdata1._icon = "1 (7)";? ? ? ??
itemdata1._itemName = "沼澤";? ? ? ?
?itemdata1._itemNum = "第二關(guān)";? ? ? ??
itemdata1._starNum = 1;? ? ? ??
dataGroup.Add(itemdata1);? ? ? ??
ItemData itemdata2 = new ItemData();? ? ? ??
itemdata2._icon = "1 (15)";? ? ? ??
itemdata2._itemName = "山海關(guān)";? ? ? ??
itemdata2._itemNum = "第三關(guān)";? ? ? ?
itemdata2._starNum = 1;? ? ? ??
dataGroup.Add(itemdata2);? ? ? ??
ItemData itemdata3 = new ItemData();? ? ? ??
itemdata3._icon = "1 (12)";? ? ? ??
itemdata3._itemName = "墓地";? ? ? ??
itemdata3._itemNum = "第四關(guān)";? ? ? ??
itemdata3._starNum = 2;? ? ? ??
dataGroup.Add(itemdata3);? ? ? ?
?ItemData itemdata4 = new ItemData();? ? ? ??
itemdata4._icon = "1 (32)";? ? ? ??
itemdata4._itemName = "神殿";? ? ? ?
?itemdata4._itemNum = "第五關(guān)";? ? ? ?
?itemdata4._starNum = 3;? ? ? ??
dataGroup.Add(itemdata4);? ? ? ??
ItemData itemdata5 = new ItemData();? ? ? ??
itemdata5._icon = "1 (25)";? ? ? ??
itemdata5._itemName = "天庭";? ? ? ??
itemdata5._itemNum = "第六關(guān)";? ? ? ??
itemdata5._starNum = 2;? ? ? ??
dataGroup.Add(itemdata5);? ? ? ??
ItemData itemdata6 = new ItemData();? ? ? ??
itemdata6._icon = "1 (30)";? ? ? ??
itemdata6._itemName = "心魔";? ? ? ??
itemdata6._itemNum = "第七關(guān)";? ? ? ??
itemdata6._starNum = 3;? ? ? ??
dataGroup.Add(itemdata6);? ?
?}? ??
GameObject tempItem; //創(chuàng)建臨時(shí)的游戲?qū)ο???
void CreateTempItem() ? ?//創(chuàng)建Item
{? ? ? ??
if (dataGroup != null) ? ? ? //當(dāng)這個(gè)List不為空時(shí)
{? ? ? ? ? ??
for (int i = 0; i < dataGroup.Count; i++) ? ? ? ? ? ?//循環(huán)創(chuàng)建Item
{? ? ? ? ? ? ? ??
tempItem = Instantiate(item) as GameObject; ? ? ? ? ?//創(chuàng)建Item并且獲取到這個(gè)游戲?qū)ο?? ??
?tempItem.transform.localPosition = Vector3.zero; ? ? ? ? ? ? ? ?//將其位置,縮放大小,旋轉(zhuǎn)角度初始化
tempItem.transform.localRotation = new Quaternion();? ? ? ? ? ? ? ??
tempItem.transform.localScale = Vector3.one;? ? ? ? ? ? ? ??
tempItem.transform.SetParent(Parent); ? ? ? ? ? ? ? ?//設(shè)置其父物體為Grid
Item itemSprite = tempItem.AddComponent(); ?//為每一個(gè)創(chuàng)建的Item添加腳本
itemSprite._levelName.text = dataGroup[i]._itemName;//獲取每一個(gè)關(guān)卡的名字獲取,一下類似
itemSprite._levelNum.text = dataGroup[i]._itemNum;
string path = string.Format("Icon/{0}", dataGroup[i]._icon);//字符串拼接
itemSprite._icon.sprite = Resources.Load(path, typeof(Sprite)) as Sprite;
ShowStar(dataGroup[i]._starNum, itemSprite);//調(diào)用這個(gè)方法獲得星星的顯示
}
}
}
void ShowStar(int num,Item tempitem)//這個(gè)方法是用來顯示星星
{
if (num == 1)
{
tempitem._star1.gameObject.SetActive(true);
tempitem._star2.gameObject.SetActive(false);
tempitem._star3.gameObject.SetActive(false);
}
if (num == 2)
{
tempitem._star1.gameObject.SetActive(true);
tempitem._star2.gameObject.SetActive(true);
tempitem._star3.gameObject.SetActive(false);
}
if (num == 3)
{
tempitem._star1.gameObject.SetActive(true);
tempitem._star2.gameObject.SetActive(true);
tempitem._star3.gameObject.SetActive(true);
}
}
void Start () {
CreateTempItem();
}
}
以上就是簡單的游戲關(guān)卡的選擇界面的實(shí)現(xiàn)龙巨,如果有錯(cuò)誤笼呆,或者更好的方法,望指正旨别,萬分感謝诗赌!