UGUI系统综合案例

xiaoxiao2025-05-01  23

1.资源加载案例:

代码:

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; public class LodingPanel : MonoBehaviour { private Transform _Transform;//存储当前对象的Transform组件信息. private Image _Center;//存储需要显示进度的图片. private Text _Num;//存储需要显示进度数值的文本. private float loadingValue = 0;//记录每次累加的数值. void Start () { _Transform = gameObject.GetComponent<Transform>(); _Center = _Transform.Find("Loding/Center").GetComponent<Image>(); _Num = _Transform.Find("Loding/Num").GetComponent<Text>(); _Center.fillAmount = 0; _Num.text = ""; StartCoroutine("SetLoadingValue"); } /// <summary> /// 设置进度条数值. /// </summary> IEnumerator SetLoadingValue() { while (loadingValue < 0.95f) { loadingValue += UnityEngine.Random.Range(0.01f, 0.1f);//随机数值并累加 fillAmount属性取值0-1 . _Center.fillAmount = loadingValue; _Num.text = Math.Round(loadingValue, 2) * 100 + "%";//保留两位. yield return new WaitForSeconds(0.2f);//等待的秒数. } _Center.fillAmount = 1; _Num.text = "100%"; Debug.Log("进度条加载完毕."); } }

项目素材地址:链接: https://pan.baidu.com/s/1hQyEzjvQl-_v293UkY0b4g 提取码: m52p 点击链接提取素材

2.游戏签到案例:

以下是各个UI元素布局结构图:

 

 

 

把Item拖拽到Resources文件夹下面,把LitJson存放到Plugins文件夹下(存放在这个文件夹下的资源会优先编译),因为我们要使用Json完成对象的转换.

项目素材地址:链接: https://pan.baidu.com/s/1fZYrkb8nuQxMKXqkx-wKXw 提取码: u97i

项目代码:

using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 签到元素数据实体类. /// </summary> public class SignInItem { private string itemName;//名称 private string itemRank;//等级 private int itemNum;//数量. public string ItemName { get { return itemName; } set { itemName = value; } } public string ItemRank { get { return itemRank; } set { itemRank = value; } } public int ItemNum { get { return itemNum; } set { itemNum = value; } } public SignInItem() { } /// <summary> /// 构造方法初始化. /// </summary> public SignInItem(string itemName,string itemRank,int num) { this.ItemName = itemName; this.ItemRank = itemRank; this.ItemNum = num; } /// <summary> /// 测试输出Json文本信息. /// </summary> /// <returns></returns> public override string ToString() { return string.Format("名称:{0},等级:{1},数量:{2}",this.itemName,this.itemRank,this.itemNum); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 签到面板单个元素管理器脚本. /// </summary> public class SignInItemManager : MonoBehaviour { private Transform _Transform; private Image item_Rank;//等级. private Image item_Img;//元素图片. private Text item_Num;//数量. private GameObject item_Mask; void Awake() { _Transform = gameObject.GetComponent<Transform>(); item_Rank = gameObject.GetComponent<Image>(); item_Img = _Transform.Find("Img").GetComponent<Image>(); item_Num = _Transform.Find("Num").GetComponent<Text>(); item_Mask = _Transform.Find("Mask").gameObject; item_Mask.SetActive(false); } /// <summary> /// 设置元素值. /// </summary> /// <param name="name">元素图片</param> /// <param name="rank">元素等级框</param> /// <param name="num">元素个数</param> /// <param name="isSignIn">是否已签到</param> public void SetItemValue(string name,string rank,int num,bool isSignIn) { item_Rank.sprite = Resources.Load<Sprite>("Sprites/rank/"+ rank); item_Img.sprite = Resources.Load<Sprite>("Sprites/item/" + name); item_Num.text = num.ToString(); if (isSignIn) { item_Mask.SetActive(true); } } /// <summary> /// 动态添加按钮点击事件. /// </summary> public void AddBtnClick() { gameObject.AddComponent<Button>().onClick.AddListener ( ()=> { item_Mask.SetActive(true); } ); } }

 

using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson;//引入命名空间. /// <summary> /// 签到面板管理器脚本. /// </summary> public class SignInPanelManager : MonoBehaviour { private Transform _Transform; private GameObject prefab_Item; private Transform itemParent; private List<SignInItem> itemList = new List<SignInItem>(); private int signInNum = 12;//默认月签到数. void Start() { Init(); CreateAllItem(); } /// <summary> /// 初始化. /// </summary> private void Init() { _Transform = gameObject.GetComponent<Transform>(); prefab_Item = Resources.Load<GameObject>("Item");//加载元素预制体. string jsonStr = Resources.Load<TextAsset>("signIn").text;//加载Json数据. itemParent = _Transform.Find("SignInBG/Grid").GetComponent<Transform>();//查找元素父物体. JsonData jsonData = JsonMapper.ToObject(jsonStr);//字符串转化成Json数据. Debug.Log(jsonData.Count); //将Json数据转换成数据实体类并添加到集合中. for (int i = 0; i < jsonData.Count; i++) { SignInItem item = JsonMapper.ToObject<SignInItem>(jsonData[i].ToJson()); itemList.Add(item); } } /// <summary> /// 创建所有签到元素. /// </summary> private void CreateAllItem() { for(int i = 0; i < itemList.Count; i++) { GameObject go= GameObject.Instantiate<GameObject>(prefab_Item, itemParent); SignInItemManager sm = go.GetComponent<SignInItemManager>(); if (i < signInNum) { sm.SetItemValue(itemList[i].ItemName, itemList[i].ItemRank, itemList[i].ItemNum,true); } else { sm.SetItemValue(itemList[i].ItemName, itemList[i].ItemRank, itemList[i].ItemNum,false); } if (i == signInNum) { sm.AddBtnClick(); } } } }

2.游戏商城案例:

需要设置的地方我都用红框框选住了,各位照着做即可,整个案例布局总共26张截图。

以下是各个UI元素布局结构图:

 

 

 

 

 

 

 

 

 

 

 

 在本案例中共存在三个预制体它们的名字分别为:Tab、Content、ContentItem。

项目素材地址:链接: https://pan.baidu.com/s/1YzR-HfQAV_6GmLKDKI1Eig 提取码: 3kmu

项目代码:

using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 商城元素数据实体类. /// </summary> public class ShopItem { private string itemName;//元素名称. private int itemPrice;//元素价格. public string ItemName { get { return itemName; } set { itemName = value; } } public int ItemPrice { get { return itemPrice; } set { itemPrice = value; } } public ShopItem() { } public ShopItem(string name,int price) { this.ItemName = name; this.ItemPrice = price; } public override string ToString() { return string.Format("元素名称:{0},元素价格:{1}",this.itemName,this.itemPrice); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 商城模块选项卡管理器脚本. /// </summary> public class ShopTabManager : MonoBehaviour { private Transform _Transform; private Text tabName;//选项卡标签名称. private Button _Button; private int index = -1; void Awake() { _Transform = gameObject.GetComponent<Transform>(); _Button = gameObject.GetComponent<Button>(); tabName = _Transform.Find("Name").GetComponent<Text>(); _Button.onClick.AddListener(ButtonEvent); } /// <summary> /// 初始化选项卡. /// </summary> public void InitTabs(int index,string name) { this.index = index; gameObject.name = "Tab" + index; tabName.text = name; } /// <summary> /// 按钮点击事件. /// </summary> private void ButtonEvent() { SendMessageUpwards("ResetTabAndContent", index);//发送消息到父物体. } } using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 商城模块内容区域管理器脚本. /// </summary> public class ShopContentManager : MonoBehaviour { private Transform _Transform; private Transform grid_Transform; private int index = -1; void Awake() { _Transform = gameObject.GetComponent<Transform>(); grid_Transform = _Transform.Find("Grid").GetComponent<Transform>(); } /// <summary> /// 初始化内容区域. /// </summary> public void InitContent(int index, GameObject prefab, List<ShopItem> list) { this.index = index; gameObject.name = "Content" + index; CreateAllItems(prefab, list); } /// <summary> /// 创建所有元素. /// </summary> private void CreateAllItems(GameObject prefab,List<ShopItem> list) { for(int i = 0; i < list.Count; i++) { GameObject go= GameObject.Instantiate<GameObject>(prefab,grid_Transform); go.GetComponent<ShopItemManager>().InitItems(list[i].ItemName, list[i].ItemPrice); } } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 商城模块单个元素管理器脚本. /// </summary> public class ShopItemManager : MonoBehaviour { private Transform _Transform; private Text Price_Text;//商品价格. private Text shop_Name;//商品名称. void Awake() { _Transform = gameObject.GetComponent<Transform>(); Price_Text = _Transform.Find("Bottom/Gem/Price").GetComponent<Text>(); shop_Name = _Transform.Find("Top/Right/Title/ShopName").GetComponent<Text>(); } /// <summary> /// 初始化元素. /// </summary> public void InitItems(string name,int price) { shop_Name.text = name; Price_Text.text = price.ToString(); } } using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using LitJson; /// <summary> /// 商城面板管理器. /// </summary> public class ShopPanelManager : MonoBehaviour { private Transform _Transform; private Transform tab_Transform;//标签选项卡父物体. private Transform content_Transform;//内容区域父物体. private GameObject prefab_Tab;//选项卡预制体. private GameObject prefab_Content;//内容区域预制体. private GameObject prefab_ContentItem;//内容元素预制体. private int tabNum = 4;//选项卡个数. private int currentIndex = -1;//记录当前点击的选项卡下标. private Sprite normal_Sprite; private List<GameObject> tabList; private List<GameObject> contentList; void Start() { Init(); CreateAllTabs(); CreateAllContents(); ResetTabAndContent(0); } /// <summary> /// 初始化. /// </summary> private void Init() { tabList = new List<GameObject>(); contentList = new List<GameObject>(); _Transform = gameObject.GetComponent<Transform>(); tab_Transform = _Transform.Find("Background/Tabs").GetComponent<Transform>(); content_Transform = _Transform.Find("Background/Contents").GetComponent<Transform>(); prefab_Tab = Resources.Load<GameObject>("Tab"); prefab_Content = Resources.Load<GameObject>("Content"); prefab_ContentItem = Resources.Load<GameObject>("ContentItem"); normal_Sprite = Resources.Load<Sprite>("Button_Normal"); } /// <summary> /// 创建所有选项卡. /// </summary> private void CreateAllTabs() { string[] tabNames = new string[] { "武器", "时装", "宝箱", "碎片" }; for (int i = 0; i < tabNum; i++) { GameObject go = GameObject.Instantiate<GameObject>(prefab_Tab, tab_Transform); go.GetComponent<ShopTabManager>().InitTabs(i, tabNames[i]); tabList.Add(go); } } /// <summary> /// 创建所有内容区域. /// </summary> private void CreateAllContents() { List<List<ShopItem>> shopList = new List<List<ShopItem>>(); string jsonStr = Resources.Load<TextAsset>("ShopJson").text; JsonData jsonData = JsonMapper.ToObject(jsonStr); for (int i = 0; i < jsonData.Count; i++) { List<ShopItem> list = new List<ShopItem>(); JsonData jd = jsonData[i]["Type"]; for (int j = 0; j < jd.Count; j++) { ShopItem shopItem = JsonMapper.ToObject<ShopItem>(jd[j].ToJson()); list.Add(shopItem); } shopList.Add(list); } for (int i = 0; i < tabNum; i++) { GameObject go = GameObject.Instantiate<GameObject>(prefab_Content, content_Transform); go.GetComponent<ShopContentManager>().InitContent(i, prefab_ContentItem, shopList[i]); contentList.Add(go); } } /// <summary> /// 重置选项卡和正文区域. /// </summary> public void ResetTabAndContent(int index) { if (index == currentIndex) return;//避免重复执行. for (int i = 0; i < tabList.Count; i++) { contentList[i].SetActive(false); tabList[i].GetComponent<Image>().sprite = normal_Sprite; } contentList[index].SetActive(true); tabList[index].GetComponent<Image>().sprite = tabList[index].GetComponent<Button>().spriteState.pressedSprite; currentIndex = index; } }

此文章只是为了记录一下学习笔记,如有不足还望多多指点! 

 

转载请注明原文地址: https://www.6miu.com/read-5029593.html

最新回复(0)