這是運行後的層次界面,最下面的項目放在攝像頭拍不到的地方。作為預置,每個項目在網格上都有壹個Toggle組件和壹個Toggle Group組件,Itme上的Toggle組件中的Group設置為Grid,實現了點擊壹個後,其他的都不會高亮顯示。網格上有壹個組件網格布局組,實現了創建壹個項目,將父對象設置為網格時的自動排版。
在這裏,我們需要編寫三個類,壹個是我們自己虛構的數據類,壹個是獲取項目上各種ui的類,壹個是可以創建和管理項目的類。
公共類ItemData//這個類存儲數據。
{
public int _ starNum//星星的數量(我在找星星,所以現在就湊合吧)
公共string _ icon//這是圖片的名稱
公共string _ itemName//檢查點的名稱
public string _ itemNum//什麽水平?
}
該項上的類用於獲取該項上的UI控件。
公共類項目:MonoBehaviour
{?
公眾形象_ star 1;?
公眾形象_ star2?
公眾形象_ star3?
公共圖像_圖標;?
public Text _ levelNum?
public Text _ levelName?
void initializeItem()?
{ ?
_star1 =轉換。Find("StarGroup/star1 ")。GetComponent & ltImage & gt();
?_star2 =轉換。Find("StarGroup/star2 ")。GetComponent & ltImage & gt();?
_star3 =轉換。Find("StarGroup/star3 ")。GetComponent & ltImage & gt();
?_icon =轉換。查找(“圖標”)。GetComponent & ltImage & gt();?
_levelName = transform。Find("級別名/名稱")。GetComponent & ltText & gt();?
_levelNum =轉換。Find("Levelname/Lv ")。GetComponent & ltText & gt();
}
void Awake()
{
initialize item();
}
}
這是壹個管理項目創建的類。
公共類MainMgr : MonoBehaviour?
{?
遊戲對象項目;?
轉換父項;//我們需要得到網格的變換。
列表& ltItemData & gtdataGroup =新列表& ltItemData & gt();
void Awake()?
{ ?
CreateData();?
item =轉換。查找(“項目”)。遊戲對象;//獲取開頭放置在攝像頭外的遊戲對象作為預設體。
父=轉換。Find(“網格”);//保存網格的轉換。
}?
Void CreateData() //創建自己的虛構數據。
{
?數據組。clear();//確保該列表沒有其他數據。
ItemData ItemData = new ItemData();?
itemdata。_ icon = " 1(5)";
Itemdata。_ itemName = " grove?
Itemdata。_itemNum = "第壹級";?
itemdata。_ star num = 3;?
數據組。add(item data);?
item data item data 1 = new item data();?
itemdata1。_ icon = " 1(7)";?
Itemdata1。_ itemName = " swamp
?Itemdata1。_itemNum = "第二級";?
itemdata1。_ star num = 1;?
數據組。add(item data 1);?
item data item data 2 = new item data();?
項目數據2。_ icon = " 1(15)";?
項目數據2。_itemName = "山海關";?
項目數據2。_itemNum = "第三級";
項目數據2。_ star num = 1;?
數據組。add(item data 2);?
item data item data 3 = new item data();?
itemdata3。_ icon = " 1(12)";?
Itemdata3。_itemName = "墓地";?
Itemdata3。_ itemNum = " Level 4?
itemdata3。_ star num = 2;?
數據組。add(item data 3);
?item data item data 4 = new item data();?
項目數據4。_ icon = " 1(32)";?
項目數據4。_ itemName = " Temple
?項目數據4。_ itemNum = " level 5
?項目數據4。_ star num = 3;?
數據組。add(item data 4);?
item data item data 5 = new item data();?
項目數據5。_ icon = " 1(25)";?
項目數據5。_itemName = "天堂";?
項目數據5。_ itemNum = " level 6?
項目數據5。_ star num = 2;?
數據組。add(item data 5);?
item data item data 6 = new item data();?
項目數據6。_ icon = " 1(30)";?
項目數據6。_ itemName = " demons?
項目數據6。_ itemNum = " level 7?
項目數據6。_ star num = 3;?
數據組。add(item data 6);
?}?
GameObject tempItem//創建壹個臨時遊戲對象
Void CreateTempItem() //創建項目
{ ?
if (dataGroup!= null)?//當此列表不為空時
{ ?
for(int I = 0;我& lt數據組。數數;I++) //循環創建項
{ ?
tempItem =將(Item)實例化為GameObject?//創建物品並獲得這個遊戲對象?
?temp item . transform . local position = vector 3 . zero;//初始化其位置、縮放大小和旋轉角度。
temp item . transform . local rotation = new四元數();?
temp item . transform . local scale = vector 3 . one;?
temp item . transform . set Parent(Parent);//將其父對象設置為Grid。
Item itemSprite = tempItem。add component();?//為每個創建的項目添加腳本。
itemSprite。_levelName.text = dataGroup[i]。_ itemName//獲取每壹級的名稱,類似於下面。
itemSprite。_levelNum.text = dataGroup[i]。_ itemNum
字符串路徑=字符串。格式(" Icon/{0} ",數據組[i]。_ icon);//字符串串聯
itemSprite。_icon.sprite = Resources。將(path,typeof(Sprite))作為Sprite加載;
ShowStar(數據組[i]._starNum,items prite);//調用此方法獲取星星的顯示。
}
}
}
Void show star (int num,item tempitem)//此方法用於顯示星星。
{
if (num == 1)
{
tempitem。_ star 1 . game object . set active(true);
tempitem。_ star 2 . game object . set active(false);
tempitem。_ star 3 . game object . set active(false);
}
如果(數量== 2)
{
tempitem。_ star 1 . game object . set active(true);
tempitem。_ star 2 . game object . set active(true);
tempitem。_ star 3 . game object . set active(false);
}
如果(數量== 3)
{
tempitem。_ star 1 . game object . set active(true);
tempitem。_ star 2 . game object . set active(true);
tempitem。_ star 3 . game object . set active(true);
}
}
void Start () {
CreateTempItem();
}
}
以上是壹個簡單的遊戲關卡選擇界面的實現。如果有什麽錯誤,或者更好的方法,請指正。非常感謝!