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();
}
}
以上是一个简单的游戏关卡选择界面的实现。如果有什么错误,或者更好的方法,请指正。非常感谢!