问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-11-23 01:58

我来回答

1个回答

热心网友 时间:2023-12-30 17:17

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

这是运行后的Hierarchy的界面,其中最下面的Item是放在摄像机不能拍到的位置,当做预设体,每个Item都有Toggle组件,在Grid上有Toggle Group 组件,并且将Itme上的Toggle组件中Group设置为Grid,这实现了点了一个之后,其他不会高亮。Grid上有组件 Grid Layout Group,该组件实现了当创建Item,并且将父物体设置为Grid后能够自动排版

这里我们需要写三个类,一个是自己捏造的数据类,放在Item上获取各种UI的类,还有能够创建Item并且能够对Item进行管理的类

public class ItemData//这个类存放的是数据

{

public int _starNum;//星星的数量(本来是想找星星的,现在就随便将就一下)

public string _icon;//这是图片名字

public string _itemName;//关卡的名字

public string _itemNum;//第几关

}

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();

}

}

这是个管理Item创建的类

public class MainMgr : MonoBehaviour 

{    

GameObject item;    

Transform Parent;    //这里需要得到Gird的Transform

List<ItemData> dataGroup = new List<ItemData>();   

void Awake()    

{        

CreateData();        

item = transform.Find("Item").gameObject;        //获得一开始放在摄像机外的游戏对象,当做预设体

Parent = transform.Find("Grid");    //保存Gird的Transform

}    

void CreateData()    //创建自己捏造的数据

{       

 dataGroup.Clear();//确保这个List没有其他数据        

ItemData itemdata = new ItemData();        

itemdata._icon = "1 (5)";       

itemdata._itemName = "小树林";        

itemdata._itemNum = "第一关";        

itemdata._starNum = 3;        

dataGroup.Add(itemdata);        

ItemData itemdata1 = new ItemData();        

itemdata1._icon = "1 (7)";        

itemdata1._itemName = "沼泽";       

 itemdata1._itemNum = "第二关";        

itemdata1._starNum = 1;        

dataGroup.Add(itemdata1);        

ItemData itemdata2 = new ItemData();        

itemdata2._icon = "1 (15)";        

itemdata2._itemName = "山海关";        

itemdata2._itemNum = "第三关";       

itemdata2._starNum = 1;        

dataGroup.Add(itemdata2);        

ItemData itemdata3 = new ItemData();        

itemdata3._icon = "1 (12)";        

itemdata3._itemName = "墓地";        

itemdata3._itemNum = "第四关";        

itemdata3._starNum = 2;        

dataGroup.Add(itemdata3);       

 ItemData itemdata4 = new ItemData();        

itemdata4._icon = "1 (32)";        

itemdata4._itemName = "神殿";       

 itemdata4._itemNum = "第五关";       

 itemdata4._starNum = 3;        

dataGroup.Add(itemdata4);        

ItemData itemdata5 = new ItemData();        

itemdata5._icon = "1 (25)";        

itemdata5._itemName = "天庭";        

itemdata5._itemNum = "第六关";        

itemdata5._starNum = 2;        

dataGroup.Add(itemdata5);        

ItemData itemdata6 = new ItemData();        

itemdata6._icon = "1 (30)";        

itemdata6._itemName = "心魔";        

itemdata6._itemNum = "第七关";        

itemdata6._starNum = 3;        

dataGroup.Add(itemdata6);   

 }    

GameObject tempItem; //创建临时的游戏对象   

void CreateTempItem()    //创建Item

{        

if (dataGroup != null)       //当这个List不为空时

{            

for (int i = 0; i < dataGroup.Count; i++)            //循环创建Item

{                

tempItem = Instantiate(item) as GameObject;          //创建Item并且获取到这个游戏对象     

 tempItem.transform.localPosition = Vector3.zero;                //将其位置,缩放大小,旋转角度初始化

tempItem.transform.localRotation = new Quaternion();                

tempItem.transform.localScale = Vector3.one;                

tempItem.transform.SetParent(Parent);                //设置其父物体为Grid

Item itemSprite = tempItem.AddComponent();  //为每一个创建的Item添加脚本

itemSprite._levelName.text = dataGroup[i]._itemName;//获取每一个关卡的名字获取,一下类似

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);//调用这个方法获得星星的显示

}

}

}

void ShowStar(int num,Item tempitem)//这个方法是用来显示星星

{

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();

}

}

以上就是简单的游戏关卡的选择界面的实现,如果有错误,或者更好的方法,望指正,万分感谢!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
教师证非师范生报考条件 五线谱cantabile什么意思 中草药护肤品使用注意事项 西葫芦素饺子馅怎么做好吃 手机垃圾清理软件哪个好用最好用的手机清理垃圾软件哪种最好 哪个手机清理大师最好 &gt; 宝宝大便干硬怎么办? 宝宝便干怎么办 8个月的小孩总大便干燥怎么办? 额头上起个很大的脓包 unity怎么创建王者匹配界面 燃气灶的电磁阀不响是怎么回事 皇明太阳能股份有限公司怎么样? ...我学的是企业管理。 我的保证:我保证绝对不直接黏贴您的文章_百度... 国土资源局招聘的矿业类包括安全工程吗 请问一下在国土资源局都做哪些工作? 武鸣哪里有卖vivo手机壳,离新城路近,便宜(20元以内) 使用稳压二极管时应注意哪些事项 个人荣誉称号文案(个人荣誉称号有哪些) 新鲜鸭子能不能上飞机托运 飞机不能带的东西有那些 健脾糕的做法 健脾糕这么做 想去尼泊尔旅游,怎么做呀? 禧玛诺rs100轮组怎么样 本田2017Ca100rs多少钱 萘是什么体,是晶体还是非晶体 萘的工业用途是什么 办一个电话卡,装在手机上开共享,可以当流量卡用吗? 美的空调预热要多久 ...在电视上经常能看到在手机屏幕上可以显示自己写的字,请问怎么操作... 这个女的是出自哪里哇? 货车营运证怎么办理,如何申请办理货运证 跑步的时候,准备运动和跑完运动都很重要,长跑前后都要做哪些活动? 2022垂钓政策路亚三本钩能不能用 请问33岁月经量多少正常 人穷七分彻骨寒,落魄冷暖见人心 人穷七分彻骨寒落魄冷暖见人心拼音怎么打 从上海浦东机场到南通汽车东站怎么坐车从上海浦东机 上海汽车总站到南通长途车站的最后一班车是几点发车? 上海浦东机场晚上有没有直接发往南通市的班车 如何办理电表更名? 燃气灶电磁阀坏了的表现 装猪油的陶罐几年没用,可以洗来装猪油吗 石家庄哪能换飞科电动剃须刀电池 请问到哪里才能买到飞科Fs820剃须刀的电池。 中国邮政未投递成功???.. 北方供暖儿童钙一斤的棉花被加厚被罩会不会冷 今年冬天盖六斤的棉被会不会冷? 索尼电脑电池充不进去电 一直显示8%是冻得吗 为什么我开再多应用挂在后台,耗电应用一个也不显示 承接宴席店招牌怎么写