深圳网博网站建设小程序怎么做优惠券网站

news/2025/9/23 3:52:54/文章来源:
深圳网博网站建设,小程序怎么做优惠券网站,淘宝店铺运营,前端招聘网站基于 项目02《游戏-06-开发》Unity3D #xff0c; 接下来做UI框架的逻辑系统#xff0c;管理器和UI背包#xff0c; 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs #xff0c; 双击BasePanel.cs脚本修改代码#xff1a; using UnityEngine; pu…基于      项目02《游戏-06-开发》Unity3D      接下来做UI框架的逻辑系统管理器和UI背包 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs 双击BasePanel.cs脚本修改代码 using UnityEngine; public class BasePanel : MonoBehaviour{     protected bool isRemove false;     protected new string name;     protected virtual void Awake() { }     public virtual void SetActive(bool active){         gameObject.SetActive(active);     }     public virtual void OpenPanel(string name){         this.name name;         SetActive(true);     }     public virtual void ClosePanel(){         isRemove true;         SetActive(false);         Destroy(gameObject);         //移除缓存 表示界面未打开         if (UIManager.Instance.panelDict.ContainsKey(name))             UIManager.Instance.panelDict.Remove(name);     } } 双击UIManager.cs脚本修改代码 using System.Collections.Generic; using UnityEngine; public class UIManager{     static UIManager _instance;     Transform _uiRoot;     //路径配置字典     Dictionarystring, string pathDict;     //预制体缓存字典     Dictionarystring, GameObject prefabDict;     //已打开界面的缓存字典     public Dictionarystring, BasePanel panelDict;     public static UIManager Instance{         get{             if (_instance null)                 _instance new UIManager();             return _instance;         }     }     public Transform UIRoot{         get{             if (_uiRoot null){                 if (GameObject.Find(Canvas))                     _uiRoot GameObject.Find(Canvas).transform;                 else                     _uiRoot new GameObject(Canvas).transform;             };             return _uiRoot;         }     }     UIManager(){         InitDicts();     }     void InitDicts(){         prefabDict new Dictionarystring, GameObject();         panelDict new Dictionarystring, BasePanel();         pathDict new Dictionarystring, string(){             //{ UIConst.PackagePanel,Package/PackagePanel},//**         };     }     public BasePanel GetPanel(string name){         BasePanel panel null;         //检查是否已打开         if (panelDict.TryGetValue(name, out panel))             return panel;         return null;     }     public BasePanel OpenPanel(string name){         BasePanel panel null;         //检查是否已打开         if (panelDict.TryGetValue(name, out panel)){             Debug.Log($界面已打开 {name});             return null;         }         //检查路径是否配置         string path ;         if (!pathDict.TryGetValue(name, out path)){             Debug.Log($界面名称错误 或未配置路径 {name});             return null;         }         //使用缓存的预制体         GameObject panelPrefab null;         if (!prefabDict.TryGetValue(name, out panelPrefab)){             string realPath Prefabs/Panel/ path;             panelPrefab Resources.LoadGameObject(realPath) as GameObject;             prefabDict.Add(name, panelPrefab);         }         //打开界面         GameObject panelObject GameObject.Instantiate(panelPrefab, UIRoot, false);         panel panelObject.GetComponentBasePanel();         panelDict.Add(name, panel);         panel.OpenPanel(name);         return panel;     }     //关闭界面     public bool ClosePanel(string name){         BasePanel panel null;         if (!panelDict.TryGetValue(name, out panel)){             Debug.LogError($界面未打开 {name});             return false;         }         panel.ClosePanel();         return true;     }     public class UIConst{         //public const string PackagePanel PackagePanel;//**     } } 接下来就是使用这个框架 首先配置这个框架的常量在UIManger.cs修改代码 新增PackagePanel这个常量后接下来配置这个界面的路径 整体修改代码为 using System.Collections.Generic; using UnityEngine; public class UIManager{     static UIManager _instance;     Transform _uiRoot;     //路径配置字典     Dictionarystring, string pathDict;     //预制体缓存字典     Dictionarystring, GameObject prefabDict;     //已打开界面的缓存字典     public Dictionarystring, BasePanel panelDict;     public static UIManager Instance{         get{             if (_instance null)                 _instance new UIManager();             return _instance;         }     }     public Transform UIRoot{         get{             if (_uiRoot null){                 if (GameObject.Find(Canvas))                     _uiRoot GameObject.Find(Canvas).transform;                 else                     _uiRoot new GameObject(Canvas).transform;             };             return _uiRoot;         }     }     UIManager(){         InitDicts();     }     void InitDicts(){         prefabDict new Dictionarystring, GameObject();         panelDict new Dictionarystring, BasePanel();         pathDict new Dictionarystring, string(){             { UIConst.PackagePanel,Package/PackagePanel},//**         };     }     public BasePanel GetPanel(string name){         BasePanel panel null;         //检查是否已打开         if (panelDict.TryGetValue(name, out panel))             return panel;         return null;     }     public BasePanel OpenPanel(string name){         BasePanel panel null;         //检查是否已打开         if (panelDict.TryGetValue(name, out panel)){             Debug.Log($界面已打开 {name});             return null;         }         //检查路径是否配置         string path ;         if (!pathDict.TryGetValue(name, out path)){             Debug.Log($界面名称错误 或未配置路径 {name});             return null;         }         //使用缓存的预制体         GameObject panelPrefab null;         if (!prefabDict.TryGetValue(name, out panelPrefab)){             string realPath Prefabs/Panel/ path;             panelPrefab Resources.LoadGameObject(realPath) as GameObject;             prefabDict.Add(name, panelPrefab);         }         //打开界面         GameObject panelObject GameObject.Instantiate(panelPrefab, UIRoot, false);         panel panelObject.GetComponentBasePanel();         panelDict.Add(name, panel);         panel.OpenPanel(name);         return panel;     }     //关闭界面     public bool ClosePanel(string name){         BasePanel panel null;         if (!panelDict.TryGetValue(name, out panel)){             Debug.LogError($界面未打开 {name});             return false;         }         panel.ClosePanel();         return true;     }     public class UIConst{         //配置常量         public const string PackagePanel PackagePanel;//**     } } 回到unity编辑器中新创建一个脚本文件PackagePanel.cs脚本 功能是处理背包界面相关的逻辑处理 双击PackagPanel.cs脚本修改代码 它是继承BasePanel.cs脚本的具体逻辑先不写 public class PackagePanel : BasePanel{ } 保存后绑定在unity编辑器中的PackagePanel对象身上 为了测试背包数据是否正确运行 我们需要在修改器GMCmd.cs脚本中添加一个打开背包界面的方法 using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; using static UIManager; public class GMCmd{     [MenuItem(CMCmd/读取表格)]     public static void ReadTable(){         PackageTable packageTable Resources.LoadPackageTable(TableData/PackageTable);         foreach (PackageTableItem packageItem in packageTable.dataList)             Debug.Log(string.Format($[id] {packageItem.id} [name] {packageItem.name}));     }     [MenuItem(CMCmd/创建背包测试数据)]     public static void CreateLocalPackageData(){         //保存数据         PackageLocalData.Instance.items new ListPackageLocalItem();         for (int i 1; i 9; i){             PackageLocalItem packageLocalItem new(){                 uid Guid.NewGuid().ToString(),                 id i,                 num i,                 level i,                 isNew i % 2 i             };             PackageLocalData.Instance.items.Add(packageLocalItem);         }         PackageLocalData.Instance.SavaPackage();     }     [MenuItem(CMCmd/读取背包测试数据)]     public static void ReadLocalPackageData(){         //读取数据         ListPackageLocalItem readItems PackageLocalData.Instance.LoadPackage();         foreach (PackageLocalItem item in readItems)             Debug.Log(item);     }     [MenuItem(CMCmd/打开背包主界面)]     public static void OpenPackagePanel(){         UIManager.Instance.OpenPanel(UIConst.PackagePanel);     } } 回到unity编辑器中先把PackagePanel保存在预制体中然后选择隐藏PackagePanel对象 运行项目点击修改器GMCmd打开背包即可实现背包的打开 这样框架已经初步完成下面开始界面初始化 界面初始化的第一步就是拿到这些东西首先在PackagePanel.cs脚本中属性初始化 using UnityEngine; using UnityEngine.UI; public class PackagePanel : BasePanel{     Transform UIMenu;     Transform UIMenuWeapon;     Transform UIMenuFood;     Transform UITabName;     Transform UICloseBtn;     Transform UICenter;     Transform UIScrollView;     Transform UIDetailPanel;     Transform UILeftBtn;     Transform UIRightBtn;     Transform UIDeletePanel;     Transform UIDeleteBackBtn;     Transform UIDeleteInfoText;     Transform UIDeleteConfirmBtn;     Transform UIBottomMenus;     Transform UIDeleteBtn;     Transform UIDetailBtn; override protected void Awake(){         base.Awake();         InitUI();     }     void InitUI(){         InitUIName();         InitClick();     }     void InitUIName(){         UIMenu transform.Find(TopCenter/Menu);         UIMenuWeapon transform.Find(TopCenter/Menus/Weapon);         UIMenuFood transform.Find(TopCenter/Menus/Food);         UITabName transform.Find(LeftTop/TabName);         UICloseBtn transform.Find(RightTop/Close);         UICenter transform.Find(Center);         UIScrollView transform.Find(Center/Scroll View);         UIDetailPanel transform.Find(Center/DetailPanel);         UILeftBtn transform.Find(Left/Button);         UIRightBtn transform.Find(Right/Button); UIDeletePanel transform.Find(Bottom/DeletePanel);         UIDeleteBackBtn transform.Find(Bottom/DeletePanel/Back);         UIDeleteInfoText transform.Find(Bottom/DeletePanel/InfoText);         UIDeleteConfirmBtn transform.Find(Bottom/DeletePanel/ConfirmBtn);         UIBottomMenus transform.Find(Bottom/BottomMenus);         UIDeleteBtn transform.Find(Bottom/BottomMenus/DeleteBtn);         UIDetailBtn transform.Find(Bottom/BottomMenus/DetailBtn); UIDeletePanel.gameObject.SetActive(false);         UIBottomMenus.gameObject.SetActive(true);     }     void InitClick(){         UIMenuWeapon.GetComponentButton().onClick.AddListener(OnClickWeapon);         UIMenuFood.GetComponentButton().onClick.AddListener(OnClickFood);         UICloseBtn.GetComponentButton().onClick.AddListener(OnClickClose);         UILeftBtn.GetComponentButton().onClick.AddListener(OnClickLeft);         UIRightBtn.GetComponentButton().onClick.AddListener(OnClickRight); UIDeleteBackBtn.GetComponentButton().onClick.AddListener(OnDeleteBack);         UIDeleteConfirmBtn.GetComponentButton().onClick.AddListener(OnDeleteConfirm);         UIDeleteBtn.GetComponentButton().onClick.AddListener(OnDelete);         UIDetailBtn.GetComponentButton().onClick.AddListener(OnDetail);     } void OnDetail(){         print( OnDetail());     }     void OnDelete(){         print( OnDelete());     }     void OnDeleteConfirm(){         print( OnDeleteConfirm());     }     void OnDeleteBack(){         print( OnDeleteBack());     }     void OnClickRight(){         print( OnClickRight());     }     void OnClickLeft(){         print( OnClickLeft());     }     void OnClickWeapon(){         print( OnClickWeapon());     }     void OnClickFood(){         print( OnClickFood());     }     void OnClickClose(){         print( OnClickClose());         ClosePanel();     } } 接下来添加脚本PackageCell.cs脚本用来处理具体道具 双击PackageCell.cs脚本修改代码 using UnityEngine; public class PackageCell : MonoBehaviour{     Transform UIIcon;     Transform UIHead;     Transform UINew;     Transform UISelect;     Transform UILevel;     Transform UIStars;     Transform UIDeleteSelect; PackageLocalItem packageLocalData;     PackageTableItem packageTableItem;     PackagePanel uiParent; void Awake(){         InitUIName();     }     void InitUIName(){         UIIcon transform.Find(Top/Icon);         UIHead transform.Find(Top/Head);         UINew transform.Find(Top/New);         UILevel transform.Find(Bottom/LevelText);         UIStars transform.Find(Bottom/Stars);         UISelect transform.Find(Select);         UIDeleteSelect transform.Find(DeleteSelect); UIDeleteSelect.gameObject.SetActive(false);     } } 保存代码将PackageCell.cs脚本绑定在unity编辑器的PackageItem对象身上 解压缩PackagePanel将PackagePanel对象和PackageItem对象重新放入自己的预制体包中 检查层级是否正确 检查是否按键都添加了Button按钮 回到unity场景中重设PackagePanel对象和PackageItem对象的预制体 运行项目打开背包界面如果没有报错证明已成功连接 接下来做控制器逻辑 也就是说取到动态数据再配合静态数据对滚动容器进行初始化 所以现在要做的就是获取数据 我们采用一个中间管理器来统一处理这些数据 修改MainGame.cs脚本 using System.Collections.Generic; using UnityEngine; using static UIManager; public class MainGame : MonoBehaviour{     public static Player player;     void Awake(){         player GameObject.Find(Player).GetComponentPlayer();         //背包系统         _instance this;         DontDestroyOnLoad(gameObject);     }     //背包系统     static MainGame _instance;     PackageTable packageTable;     public static MainGame Instance{         get{             return _instance;         }     }     void Start(){         UIManager.Instance.OpenPanel(UIConst.PackagePanel);     }     //对静态数据加载     public PackageTable GetPackageTable(){         if (packageTable null)             packageTable Resources.LoadPackageTable(TableData/PackageTable);         return packageTable;     }     //对动态数据加载     public ListPackageLocalItem GetPackageLocalData(){         return PackageLocalData.Instance.LoadPackage();     }     //根据ID去表格中拿到指定的数据     public PackageTableItem GetPackageItemById(int id){         ListPackageTableItem packageDataList GetPackageTable().dataList;         foreach (PackageTableItem item in packageDataList){             if (item.id id)                 return item;         }         return null;     }     //根据uid去本地数据中拿到动态数据     public PackageLocalItem GetPackageLocalItemByUId(string uid){         ListPackageLocalItem packageDataList GetPackageLocalData();         foreach (PackageLocalItem item in packageDataList){             if (item.uid uid)                 return item;         }         return null;     }     public ListPackageLocalItem GetSortPackageLocalData(){         ListPackageLocalItem localItems PackageLocalData.Instance.LoadPackage();         //localItems.Sort(new PackageItemComparer());         return localItems;     }     public class PackageItemComparer : IComparerPackageLocalItem{         public int Compare(PackageLocalItem a, PackageLocalItem b){             PackageTableItem x MainGame.Instance.GetPackageItemById(a.id);             PackageTableItem y MainGame.Instance.GetPackageItemById(b.id);             //首先按star从大到小排序             int starComparison y.star.CompareTo(x.star);             //如果star相同则按id从大到小排序             if (starComparison 0){                 int idComparison y.id.CompareTo(x.id);                 if (idComparison 0)                     return b.level.CompareTo(a.level);                 return idComparison;             }             return starComparison;         }     } } 修改PackagePanel.cs脚本添加一个子物体的预制体 这样在PackagePanel预制体中就可以看到一个公开的属性 我们将PackageItem预制体拖拽进去 下一步是添加背包页面PackagePanel.cs的背包滚动容器部分 把这部分逻辑添加在Start()函数中 再添加两个方法 具体代码如下 using UnityEngine; using UnityEngine.UI; public class PackagePanel : BasePanel{     Transform UIMenu;     Transform UIMenuWeapon;     Transform UIMenuFood;     Transform UITabName;     Transform UICloseBtn;     Transform UICenter;     Transform UIScrollView;     Transform UIDetailPanel;     Transform UILeftBtn;     Transform UIRightBtn;     Transform UIDeletePanel;     Transform UIDeleteBackBtn;     Transform UIDeleteInfoText;     Transform UIDeleteConfirmBtn;     Transform UIBottomMenus;     Transform UIDeleteBtn;     Transform UIDetailBtn; //添加     public GameObject PackageUIItemPrefab; override protected void Awake(){         base.Awake();         InitUI();     }     //添加1     void Start(){         RefreshUI();     }     //添加1     void RefreshUI(){         RefreshScroll();     }     //添加1     void RefreshScroll(){         //清理滚动容器中原本的物品         RectTransform scrollContent UIScrollView.GetComponentScrollRect().content;         for (int i 0; i scrollContent.childCount; i)             Destroy(scrollContent.GetChild(i).gameObject);         //获取本地数据的方法拿到自己身上背包数据 并且根据背包数据初始化滚动容器         foreach (PackageLocalItem localData in MainGame.Instance.GetSortPackageLocalData()){             Transform PackageUIItem Instantiate(PackageUIItemPrefab.transform, scrollContent) as Transform; PackageCell packageCell PackageUIItem.GetComponentPackageCell();             //packageCell.Refresh(localData, this);         }     }     void InitUI(){         InitUIName();         InitClick();     }     void InitUIName(){         UIMenu transform.Find(TopCenter/Menu);         UIMenuWeapon transform.Find(TopCenter/Menus/Weapon);         UIMenuFood transform.Find(TopCenter/Menus/Food);         UITabName transform.Find(LeftTop/TabName);         UICloseBtn transform.Find(RightTop/Close);         UICenter transform.Find(Center);         UIScrollView transform.Find(Center/Scroll View);         UIDetailPanel transform.Find(Center/DetailPanel);         UILeftBtn transform.Find(Left/Button);         UIRightBtn transform.Find(Right/Button); UIDeletePanel transform.Find(Bottom/DeletePanel);         UIDeleteBackBtn transform.Find(Bottom/DeletePanel/Back);         UIDeleteInfoText transform.Find(Bottom/DeletePanel/InfoText);         UIDeleteConfirmBtn transform.Find(Bottom/DeletePanel/ConfirmBtn);         UIBottomMenus transform.Find(Bottom/BottomMenus);         UIDeleteBtn transform.Find(Bottom/BottomMenus/DeleteBtn);         UIDetailBtn transform.Find(Bottom/BottomMenus/DetailBtn); UIDeletePanel.gameObject.SetActive(false);         UIBottomMenus.gameObject.SetActive(true);     }     void InitClick(){         UIMenuWeapon.GetComponentButton().onClick.AddListener(OnClickWeapon);         UIMenuFood.GetComponentButton().onClick.AddListener(OnClickFood);         UICloseBtn.GetComponentButton().onClick.AddListener(OnClickClose);         UILeftBtn.GetComponentButton().onClick.AddListener(OnClickLeft);         UIRightBtn.GetComponentButton().onClick.AddListener(OnClickRight); UIDeleteBackBtn.GetComponentButton().onClick.AddListener(OnDeleteBack);         UIDeleteConfirmBtn.GetComponentButton().onClick.AddListener(OnDeleteConfirm);         UIDeleteBtn.GetComponentButton().onClick.AddListener(OnDelete);         UIDetailBtn.GetComponentButton().onClick.AddListener(OnDetail);     } void OnDetail(){         print( OnDetail());     }     void OnDelete(){         print( OnDelete());     }     void OnDeleteConfirm(){         print( OnDeleteConfirm());     }     void OnDeleteBack(){         print( OnDeleteBack());     }     void OnClickRight(){         print( OnClickRight());     }     void OnClickLeft(){         print( OnClickLeft());     }     void OnClickWeapon(){         print( OnClickWeapon());     }     void OnClickFood(){         print( OnClickFood());     }     void OnClickClose(){         print( OnClickClose());         ClosePanel();     } } 回到unity编辑器中运行项目可见背包出现8个道具说明背包数量初始化成功 修改PackageCell.cs脚本 using UnityEngine; using UnityEngine.UI; public class PackageCell : MonoBehaviour{     Transform UIIcon;     Transform UIHead;     Transform UINew;     Transform UISelect;     Transform UILevel;     Transform UIStars;     Transform UIDeleteSelect; //动态数据     PackageLocalItem packageLocalData;     //静态数据     PackageTableItem packageTableItem;     //父物体也就是PackagePanel本身     PackagePanel uiParent; void Awake(){         InitUIName();     }     void InitUIName(){         UIIcon transform.Find(Top/Icon);         UIHead transform.Find(Top/Head);         UINew transform.Find(Top/New);         UILevel transform.Find(Bottom/LevelText);         UIStars transform.Find(Bottom/Stars);         UISelect transform.Find(Select);         UIDeleteSelect transform.Find(DeleteSelect); UIDeleteSelect.gameObject.SetActive(false);     }     //刷新     public void Refresh(PackageLocalItem packageLocalData, PackagePanel uiParent){         //数据初始化         this.packageLocalData packageLocalData;         this.packageTableItem MainGame.Instance.GetPackageItemById(packageLocalData.id);         this.uiParent uiParent;         //等级信息         UILevel.GetComponentText().text Lv. this.packageLocalData.level.ToString();         //是否是新获得         UINew.gameObject.SetActive(this.packageLocalData.isNew);         Debug.Log(ImagePath: this.packageTableItem.imagePath);         //物品的图片         Texture2D t (Texture2D)Resources.Load(this.packageTableItem.imagePath);         if (t ! null){             Sprite temp Sprite.Create(t, new Rect(0, 0, t.width, t.height), new Vector2(0, 0));             // 继续处理 Sprite 对象             UIIcon.GetComponentImage().sprite temp;         }         else{             // 处理纹理加载失败的情况             Debug.LogError(Failed to load texture.);         }         //刷新星级         RefreshStars();     }     //刷新星级     public void RefreshStars(){         for (int i 0; i UIStars.childCount; i){             Transform star UIStars.GetChild(i);             if (this.packageTableItem.star i)                 star.gameObject.SetActive(true);             else                 star.gameObject.SetActive(false);         }     } } 最后总结代码 using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; using static UIManager; public class GMCmd{     [MenuItem(CMCmd/读取表格)]     public static void ReadTable(){         PackageTable packageTable Resources.LoadPackageTable(TableData/PackageTable);         foreach (PackageTableItem packageItem in packageTable.dataList)             Debug.Log(string.Format($[id] {packageItem.id} [name] {packageItem.name}));     }     [MenuItem(CMCmd/创建背包测试数据)]     public static void CreateLocalPackageData(){         //保存数据         PackageLocalData.Instance.items new ListPackageLocalItem();         for (int i 1; i 9; i){             PackageLocalItem packageLocalItem new(){                 uid Guid.NewGuid().ToString(),                 id i,                 num i,                 level i,                 isNew i % 2 i             };             PackageLocalData.Instance.items.Add(packageLocalItem);         }         PackageLocalData.Instance.SavaPackage();     }     [MenuItem(CMCmd/读取背包测试数据)]     public static void ReadLocalPackageData(){         //读取数据         ListPackageLocalItem readItems PackageLocalData.Instance.LoadPackage();         foreach (PackageLocalItem item in readItems)             Debug.Log(item);     }     [MenuItem(CMCmd/打开背包主界面)]     public static void OpenPackagePanel(){         UIManager.Instance.OpenPanel(UIConst.PackagePanel);     } } using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(menuName Water/PackageTable, fileName PackageTable)] public class PackageTable : ScriptableObject{     public ListPackageTableItem dataList new ListPackageTableItem(); } [System.Serializable] public class PackageTableItem{     public int id;     public int type;     public int star;     public string name;     public string description;     public string skillDescription;     public string imagePath; } using UnityEngine; using UnityEngine.UI; public class PackageCell : MonoBehaviour{     Transform UIIcon;     Transform UIHead;     Transform UINew;     Transform UISelect;     Transform UILevel;     Transform UIStars;     Transform UIDeleteSelect; //动态数据     PackageLocalItem packageLocalData;     //静态数据     PackageTableItem packageTableItem;     //父物体也就是PackagePanel本身     PackagePanel uiParent; void Awake(){         InitUIName();     }     void InitUIName(){         UIIcon transform.Find(Top/Icon);         UIHead transform.Find(Top/Head);         UINew transform.Find(Top/New);         UILevel transform.Find(Bottom/LevelText);         UIStars transform.Find(Bottom/Stars);         UISelect transform.Find(Select);         UIDeleteSelect transform.Find(DeleteSelect); UIDeleteSelect.gameObject.SetActive(false);     }     //刷新     public void Refresh(PackageLocalItem packageLocalData, PackagePanel uiParent){         //数据初始化         this.packageLocalData packageLocalData;         this.packageTableItem MainGame.Instance.GetPackageItemById(packageLocalData.id);         this.uiParent uiParent;         //等级信息         UILevel.GetComponentText().text Lv. this.packageLocalData.level.ToString();         //是否是新获得         UINew.gameObject.SetActive(this.packageLocalData.isNew);         Debug.Log(ImagePath: this.packageTableItem.imagePath);         //物品的图片         Texture2D t (Texture2D)Resources.Load(this.packageTableItem.imagePath);         if (t ! null){             Sprite temp Sprite.Create(t, new Rect(0, 0, t.width, t.height), new Vector2(0, 0));             // 继续处理 Sprite 对象             UIIcon.GetComponentImage().sprite temp;         }         else{             // 处理纹理加载失败的情况             Debug.LogError(Failed to load texture.);         }         //刷新星级         RefreshStars();     }     //刷新星级     public void RefreshStars(){         for (int i 0; i UIStars.childCount; i){             Transform star UIStars.GetChild(i);             if (this.packageTableItem.star i)                 star.gameObject.SetActive(true);             else                 star.gameObject.SetActive(false);         }     } } using UnityEngine; using UnityEngine.UI; public class PackagePanel : BasePanel{     Transform UIMenu;     Transform UIMenuWeapon;     Transform UIMenuFood;     Transform UITabName;     Transform UICloseBtn;     Transform UICenter;     Transform UIScrollView;     Transform UIDetailPanel;     Transform UILeftBtn;     Transform UIRightBtn;     Transform UIDeletePanel;     Transform UIDeleteBackBtn;     Transform UIDeleteInfoText;     Transform UIDeleteConfirmBtn;     Transform UIBottomMenus;     Transform UIDeleteBtn;     Transform UIDetailBtn; //添加     public GameObject PackageUIItemPrefab; override protected void Awake(){         base.Awake();         InitUI();     }     //添加1     void Start(){         RefreshUI();     }     //添加1     void RefreshUI(){         RefreshScroll();     }     //添加1     void RefreshScroll(){         //清理滚动容器中原本的物品         RectTransform scrollContent UIScrollView.GetComponentScrollRect().content;         for (int i 0; i scrollContent.childCount; i)             Destroy(scrollContent.GetChild(i).gameObject);         //获取本地数据的方法拿到自己身上背包数据 并且根据背包数据初始化滚动容器         foreach (PackageLocalItem localData in MainGame.Instance.GetSortPackageLocalData()){             Transform PackageUIItem Instantiate(PackageUIItemPrefab.transform, scrollContent) as Transform; PackageCell packageCell PackageUIItem.GetComponentPackageCell();             //添加2             packageCell.Refresh(localData, this);         }     }     void InitUI(){         InitUIName();         InitClick();     }     void InitUIName(){         UIMenu transform.Find(TopCenter/Menu);         UIMenuWeapon transform.Find(TopCenter/Menus/Weapon);         UIMenuFood transform.Find(TopCenter/Menus/Food);         UITabName transform.Find(LeftTop/TabName);         UICloseBtn transform.Find(RightTop/Close);         UICenter transform.Find(Center);         UIScrollView transform.Find(Center/Scroll View);         UIDetailPanel transform.Find(Center/DetailPanel);         UILeftBtn transform.Find(Left/Button);         UIRightBtn transform.Find(Right/Button); UIDeletePanel transform.Find(Bottom/DeletePanel);         UIDeleteBackBtn transform.Find(Bottom/DeletePanel/Back);         UIDeleteInfoText transform.Find(Bottom/DeletePanel/InfoText);         UIDeleteConfirmBtn transform.Find(Bottom/DeletePanel/ConfirmBtn);         UIBottomMenus transform.Find(Bottom/BottomMenus);         UIDeleteBtn transform.Find(Bottom/BottomMenus/DeleteBtn);         UIDetailBtn transform.Find(Bottom/BottomMenus/DetailBtn); UIDeletePanel.gameObject.SetActive(false);         UIBottomMenus.gameObject.SetActive(true);     }     void InitClick(){         UIMenuWeapon.GetComponentButton().onClick.AddListener(OnClickWeapon);         UIMenuFood.GetComponentButton().onClick.AddListener(OnClickFood);         UICloseBtn.GetComponentButton().onClick.AddListener(OnClickClose);         UILeftBtn.GetComponentButton().onClick.AddListener(OnClickLeft);         UIRightBtn.GetComponentButton().onClick.AddListener(OnClickRight); UIDeleteBackBtn.GetComponentButton().onClick.AddListener(OnDeleteBack);         UIDeleteConfirmBtn.GetComponentButton().onClick.AddListener(OnDeleteConfirm);         UIDeleteBtn.GetComponentButton().onClick.AddListener(OnDelete);         UIDetailBtn.GetComponentButton().onClick.AddListener(OnDetail);     } void OnDetail(){         print( OnDetail());     }     void OnDelete(){         print( OnDelete());     }     void OnDeleteConfirm(){         print( OnDeleteConfirm());     }     void OnDeleteBack(){         print( OnDeleteBack());     }     void OnClickRight(){         print( OnClickRight());     }     void OnClickLeft(){         print( OnClickLeft());     }     void OnClickWeapon(){         print( OnClickWeapon());     }     void OnClickFood(){         print( OnClickFood());     }     void OnClickClose(){         print( OnClickClose());         ClosePanel();     } } using System.Collections.Generic; using UnityEngine; public class UIManager{     static UIManager _instance;     Transform _uiRoot;     //路径配置字典     Dictionarystring, string pathDict;     //预制体缓存字典     Dictionarystring, GameObject prefabDict;     //已打开界面的缓存字典     public Dictionarystring, BasePanel panelDict;     public static UIManager Instance{         get{             if (_instance null)                 _instance new UIManager();             return _instance;         }     }     public Transform UIRoot{         get{             if (_uiRoot null){                 if (GameObject.Find(Canvas))                     _uiRoot GameObject.Find(Canvas).transform;                 else                     _uiRoot new GameObject(Canvas).transform;             };             return _uiRoot;         }     }     UIManager(){         InitDicts();     }     void InitDicts(){         prefabDict new Dictionarystring, GameObject();         panelDict new Dictionarystring, BasePanel();         pathDict new Dictionarystring, string(){             { UIConst.PackagePanel,Package/PackagePanel},//**         };     }     public BasePanel GetPanel(string name){         BasePanel panel null;         //检查是否已打开         if (panelDict.TryGetValue(name, out panel))             return panel;         return null;     }     public BasePanel OpenPanel(string name){         BasePanel panel null;         //检查是否已打开         if (panelDict.TryGetValue(name, out panel)){             Debug.Log($界面已打开 {name});             return null;         }         //检查路径是否配置         string path ;         if (!pathDict.TryGetValue(name, out path)){             Debug.Log($界面名称错误 或未配置路径 {name});             return null;         }         //使用缓存的预制体         GameObject panelPrefab null;         if (!prefabDict.TryGetValue(name, out panelPrefab)){             string realPath Prefabs/Panel/ path;             panelPrefab Resources.LoadGameObject(realPath) as GameObject;             prefabDict.Add(name, panelPrefab);         }         //打开界面         GameObject panelObject GameObject.Instantiate(panelPrefab, UIRoot, false);         panel panelObject.GetComponentBasePanel();         panelDict.Add(name, panel);         panel.OpenPanel(name);         return panel;     }     //关闭界面     public bool ClosePanel(string name){         BasePanel panel null;         if (!panelDict.TryGetValue(name, out panel)){             Debug.LogError($界面未打开 {name});             return false;         }         panel.ClosePanel();         return true;     }     public class UIConst{         //配置常量         public const string PackagePanel PackagePanel;//**     } } using System.Collections.Generic; using UnityEngine; using static UIManager; public class MainGame : MonoBehaviour{     public static Player player;     void Awake(){         player GameObject.Find(Player).GetComponentPlayer();         //背包系统         _instance this;         DontDestroyOnLoad(gameObject);     }     //背包系统     static MainGame _instance;     PackageTable packageTable;     public static MainGame Instance{         get{             return _instance;         }     }     void Start(){         UIManager.Instance.OpenPanel(UIConst.PackagePanel);     }     //对静态数据加载     public PackageTable GetPackageTable(){         if (packageTable null)             packageTable Resources.LoadPackageTable(TableData/PackageTable);         return packageTable;     }     //对动态数据加载     public ListPackageLocalItem GetPackageLocalData(){         return PackageLocalData.Instance.LoadPackage();     }     //根据ID去表格中拿到指定的数据     public PackageTableItem GetPackageItemById(int id){         ListPackageTableItem packageDataList GetPackageTable().dataList;         foreach (PackageTableItem item in packageDataList){             if (item.id id)                 return item;         }         return null;     }     //根据uid去本地数据中拿到动态数据     public PackageLocalItem GetPackageLocalItemByUId(string uid){         ListPackageLocalItem packageDataList GetPackageLocalData();         foreach (PackageLocalItem item in packageDataList){             if (item.uid uid)                 return item;         }         return null;     }     public ListPackageLocalItem GetSortPackageLocalData(){         ListPackageLocalItem localItems PackageLocalData.Instance.LoadPackage();         localItems.Sort(new PackageItemComparer());//添加         return localItems;     }     public class PackageItemComparer : IComparerPackageLocalItem{         public int Compare(PackageLocalItem a, PackageLocalItem b){             PackageTableItem x MainGame.Instance.GetPackageItemById(a.id);             PackageTableItem y MainGame.Instance.GetPackageItemById(b.id);             //首先按star从大到小排序             int starComparison y.star.CompareTo(x.star);             //如果star相同则按id从大到小排序             if (starComparison 0){                 int idComparison y.id.CompareTo(x.id);                 if (idComparison 0)                     return b.level.CompareTo(a.level);                 return idComparison;             }             return starComparison;         }     } } using System.Collections.Generic; using UnityEngine; public class PackageLocalData{     static PackageLocalData _instance;     public static PackageLocalData Instance{         get{             if (_instance null)                 _instance new PackageLocalData();             return _instance;         }     }     //存     public ListPackageLocalItem items;     public void SavaPackage(){         string inventoryJson JsonUtility.ToJson(this);         PlayerPrefs.SetString(PackageLocalData, inventoryJson);         PlayerPrefs.Save();     }     //取     public ListPackageLocalItem LoadPackage(){         if (items ! null)             return items;         if (PlayerPrefs.HasKey(PackageLocalData)){             string inventoryJson PlayerPrefs.GetString(PackageLocalData);             PackageLocalData packageLocalData JsonUtility.FromJsonPackageLocalData(inventoryJson);             items packageLocalData.items;             return items;         }         else{             items new ListPackageLocalItem();             return items;         }     } } [System.Serializable] public class PackageLocalItem{     public string uid;     public int id;     public int num;     public int level;     public bool isNew;     public override string ToString(){         return string.Format($[id] {id} [num] {num});     } } using UnityEngine; public class BasePanel : MonoBehaviour{     protected bool isRemove false;     protected new string name;     protected virtual void Awake() { }     public virtual void SetActive(bool active){         gameObject.SetActive(active);     }     public virtual void OpenPanel(string name){         this.name name;         SetActive(true);     }     public virtual void ClosePanel(){         isRemove true;         SetActive(false);         Destroy(gameObject);         //移除缓存 表示界面未打开         if (UIManager.Instance.panelDict.ContainsKey(name))             UIManager.Instance.panelDict.Remove(name);     } } 修改PackageTable组件武器编号 运行项目即实现 End.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何软件网站优化公司江门学做网站课程

在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径: import os testfiles [] testfilepaths [] L len(os.path.abspath(.))def searchfile(path):for item in os.listdir(path):if os.path.isdir(os.path.join(p…

国内 设计网站的公司网站网站模块是什么意思

一、软件包管理器 yum 1、什么是软件包 在 Linux 下安装软件,通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成…

网站这么建设装潢设计公司

1.下载并安装R语言软件,熟悉基本操作的命令及操作界面,掌握软件的使用方法(提供学号加姓名的截图)。 2.下载并安装Rstudio, (提供运行代码及运行结果的截图)。 3.下载并安装R包DT,…

如何看网站的语言delphi网站开发

一、KeyStore描述 在 Android 开发中,KeyStore 是一个用于存储密钥和证书的安全容器。它提供了一种安全的方式来存储敏感信息,如密钥对、数字证书等,以防止它们被未授权的应用或攻击者访问。 KeyStore 通常用于加密数据、数字签名、TLS/SSL…

曰本做爰l网站潮阳网站制作

目录 什么是接口? 接口协议的类型 接口测试是什么 HTTP接口的测试用例设计 HTTP接口的测试方法 什么是接口? 在面向对象编程中,接口是一个抽象的概念,用于定义类应该具有的方法和属性。一个类可以实现一个或多个接口&#xf…

做app需要网站吗工程建设动态管理网站

一、线上查询及帮助命令 1.1 man 1.1.1 介绍 man 命令用于显示命令手册页面(manual pages),提供了关于命令、函数、系统调用等的详细文档和使用说明 1.1.2 使用方法 man [选项] [命令或函数或系统调用]1.1.3 参数详解 -f:显…

c 做网站方便吗中国建设银行租赁网站

override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.//首先获得应用程序目录的路径,在该目录下有三个文件夹:文档目录、库目录、临时目录以及一个程序包。该目录就是应用程序的…

一般建站公司用什么cms网站首页快照应该怎么

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

建设网站的功能定位是什么意思seo优化培训机构

https://www.bilibili.com/video/BV1714y1j7AU/?spm_id_from333.337.search-card.all.click&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf

贵阳企业网站设计与建设html编辑器文字居中

在很多对象显示为字符串的时候都会使用到ToString中的格式化,由于以前没怎么注意到这个问题,想总结一下各个基础结构对象的格式化,以便后备之用!!!Int.ToString(format): 格式字符串采用以下形式&#xff1…

韶关网站建设制作打广告推广怎么做

1.动态链接库的使用 动态库支持以两种模式使用,一种模式下,在程序加载运行时,完成动态链接。一种模式下,在程序运行中,完成动态链接。 1.1.程序加载运行时完成动态链接 我们通过一个实例介绍程序加载运行时&#xff0c…

网站访问量什么意思河北先进网站建设风格

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目…

网站设计代码案例附近的装修公司地点

本文转载自公众号:Nebula Graph Community 。我们都知道《权利的游戏》在全世界都很多忠实的粉丝,除去你永远不知道剧情下一秒谁会挂这种意外“惊喜”,当中复杂交错的人物关系也是它火爆的原因之一,而本文介绍如何通过 NetworkX 访…

上海网站推广模板成都做网站建设公司

Redis的慢查询 许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似…

怎么做资源类网站网站建设外文版政策文件

【Spark-HDFS小文件合并】使用 Spark 实现 HDFS 小文件合并 1)导入依赖2)代码实现2.1.HDFSUtils2.2.MergeFilesApplication 需求描述: 1、使用 Spark 做小文件合并压缩处理。 2、实际生产中相关配置、日志、明细可以记录在 Mysql 中。 3、…

专业找工作网站下载网站统计如何做

来源:ScienceAI编辑 :萝卜皮密歇根大学安娜堡分校新兴技术治理专家 Shbita Parthasarathy 表示,从大量文本中生成流利语言的机器学习算法可能会改变科学研究的方式,但不一定会变得更好。在2022 年 4 月 27 日发布的一份报告中&…

组成原理毕业设计代做网站推荐郑州网页制作

文章目录 环境总结测试使用EXPOSE测试1:不做端口映射测试2:-p 8080:80测试3:-P测试4:--networkhost 不使用EXPOSE 参考 环境 RHEL 9.3Docker Community 24.0.7 总结 如果懒得看测试的详细信息,可以直接看结果&#…

目前好的推销网站水务 网站建设

#交换设备 配置OSPF认证-基于华为路由器 OSPF(开放最短路径优先)是一种内部网关协议(IGP),用于在单一自治系统(AS)内决策路由。OSPF认证功能是路由器中的一项安全措施,它的主要用途…

网站开发过程文档网站店铺vr场景可以做吗

背景 由于对应用上线后流量越来越大,原来的按年自动分区性能跟不上,因此决定改成按月自动分区,同时将原有分区数据重新迁移到新的分区 步骤 修改表分区为一个月一个分区 alter table my_table set INTERVAL (NUMTOYMINTERVAL(1, month));…

网站域名与网站首页网址行业网站建站

在日常的数据存储与交换中,移动硬盘因其便携性和大容量而备受青睐。然而,有时我们可能会遇到一种令人困扰的现象:当试图打开移动硬盘时,系统会弹出一个警告窗口,提示“磁盘未被格式化,是否现在格式化&#…