Unity UGUI实现游戏关卡选择界面

效果图,素材是网上随便拉的。

这是运行后的层次界面,最下面的项目放在摄像头拍不到的地方。作为预置,每个项目在网格上都有一个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();

}

}

以上是一个简单的游戏关卡选择界面的实现。如果有什么错误,或者更好的方法,请指正。非常感谢!