Unity3d的UI控制脚本

栏目: 编程语言 · 发布时间: 7年前

内容简介:最近学习了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));
    }

}

效果图

Unity3d的UI控制脚本

Unity3d的UI控制脚本


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Pragmatic Programmer

The Pragmatic Programmer

Andrew Hunt、David Thomas / Addison-Wesley Professional / 1999-10-30 / USD 49.99

本书直击编程陈地,穿过了软件开发中日益增长的规范和技术藩篱,对核心过程进行了审视――即根据需求,创建用户乐于接受的、可工作和易维护的代码。本书包含的内容从个人责任到职业发展,直至保持代码灵活和易于改编重用的架构技术。从本书中将学到防止软件变质、消除复制知识的陷阱、编写灵活、动态和易适应的代码、避免出现相同的设计、用契约、断言和异常对代码进行防护等内容。一起来看看 《The Pragmatic Programmer》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试