内容简介:最近学习了Unity3d游戏界面UI的设计思路,发现自己原来的设计简直就是在瞎搞,特别记录一下,一份代码解决所有按钮与界面切换的逻辑,主要是通过命名按钮与界面名字的耦合以及deleget委托。一言不合,先上代码
最近学习了Unity3d游戏界面UI的设计思路,发现自己原来的设计简直就是在瞎搞,特别记录一下,
一份代码解决所有按钮与界面切换的逻辑,主要是通过命名按钮与界面名字的耦合以及deleget委托。
一言不合,先上代码
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class UIController : MonoBehaviour { Dictionary<string, GameObject> panels = new Dictionary<string, GameObject>(); Stack<GameObject> history = new Stack<GameObject>(); GameObject[] btns; public GameObject StartPanel; GameObject currentPanel; private void Start() { GameObject[] myPanels = GameObject.FindGameObjectsWithTag("UIPanel"); btns = GameObject.FindGameObjectsWithTag("UIBtn"); foreach(GameObject g in myPanels) { Debug.Log(g.name.Substring(2)); panels.Add(g.name.Substring(2),g); currentPanel = StartPanel; if(g != StartPanel) { g.SetActive(false); } } foreach(GameObject b in btns) { b.GetComponent<Button>().onClick.AddListener(delegate () { OnButtonClickEvent(b); }); } } public void ShowPanel(string panelName) { GameObject newPanel = null; if (panelName != "Back") { if (panels.ContainsKey(panelName)) { history.Push(currentPanel); newPanel = panels[panelName]; } }else if (history.Count > 0) { newPanel = history.Pop(); } if(newPanel != null && currentPanel != null) { currentPanel.SetActive(false); currentPanel = newPanel; currentPanel.SetActive(true); } } public void OnButtonClickEvent(GameObject g) { ShowPanel(g.name.Substring(2)); } }
效果图
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 轻松实现Lua脚本控制W5500
- 控制perl脚本的CPU利用率?
- PyAndroidControl:使用python脚本控制你的安卓设备
- 脚本文件里的 Hybrid Script(混合式脚本)
- 脚本错误量极致优化-定位压缩且无 SourceMap 文件的脚本错误
- 如何从PHP脚本(如批处理文件)中运行多个PHP脚本?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Visual C++/Turbo C串口通信编程实践
熊光明 / 电子工业出版社 / 2004-10 / 55.0
一起来看看 《Visual C++/Turbo C串口通信编程实践》 这本书的介绍吧!