Unity UIButton切换相应的UI页面动态加载

来源:互联网 发布:java编程输出金字塔 编辑:程序博客网 时间:2024/04/29 04:33

  大家好!我是小唐,很多人都做游戏过程中会遇到一些比如说运营活动,有好多活动,点击每个Button的时候切换相对应的页面,我这里自己写的一个方法,思路是第一遍登录的时候检测点击哪个Button就实例化哪个页面,并相对应的加入集合中,这样下次再打开这个页面的时候直接从集合中激活该页面就可以了,就不用在实例化了。下面上代码:

using UnityEngine;using System.Collections;using System.Collections.Generic;public class Test : MonoBehaviour {    //Button相对应页面的Prefab    GameObject mButton1Page;    GameObject mButton2Page;    GameObject mButton3Page;    GameObject mButton4Page;    GameObject mButton5Page;    //所有Page页面的父节点    GameObject mPageParent;    GameObject mPagePrefab;    //存放所有页面的集合    List<GameObject> mObjPageList = new List<GameObject>();    /// <summary>    /// 点击Button调用的方法    /// </summary>    /// <param name="_id">点击Button的id</param>    void OnClickButton(int _id)    {         //为了测试id这里我直接用数字表示了,这里条件不唯一,只要能区分出你点击的Button就Ok        if (_id==1)        {            OpenPage<PageUI1>("Page1", ref mButton1Page);        }        else if (_id==2)        {<span style="white-space:pre"></span>    OpenPage<PageUI2>("Page2", ref mButton2Page);        }        else if (_id == 3)        {    OpenPage<PageUI3>("Page3", ref mButton3Page);        }        else if (_id == 4)        {    OpenPage<PageUI4>("Page4", ref mButton4Page);        }        else if (_id == 5)        {    OpenPage<PageUI5>("Page5", ref mButton5Page);        }    }    /// <summary>    /// 打开页面    /// </summary>    /// <typeparam name="T">泛型T(这里是实例化页面附加的脚本)</typeparam>    /// <param name="_resources">页面Prefab的Name</param>    /// <param name="_obj">要打开的页面</param>    /// <returns></returns>    GameObject OpenPage<T>(string _resources, ref GameObject _obj) where T : Component    {        //判断如果要打开的页面不存在则实例化该页面,反之则激活该页面        if (_obj == null)        {            mPagePrefab = Resources.Load("UI/UIData/" + _resources) as GameObject;            _obj = Instantiate(mPagePrefab) as GameObject;            _obj.transform.parent = mPageParent.transform;            _obj.name = _resources;            _obj.transform.localPosition = Vector3.zero;            _obj.transform.localScale = Vector3.one;//获取脚本            T t = _obj.gameObject.GetComponent<T>();            if (t == null)            {                t = _obj.gameObject.AddComponent<T>();            }            if (!mObjPageList.Contains(_obj))            {                mObjPageList.Add(_obj);                SetPageState(_obj);            }        }        else        {            SetPageState(_obj);        }        return _obj;    }    /// <summary>    /// 激活关闭页面    /// </summary>    /// <param name="_obj"></param>    void SetPageState(GameObject _obj)    {        for (int i = 0; i < mObjPageList.Count; i++)        {            if (mObjPageList[i].name == _obj.name)            {                mObjPageList[i].SetActive(true);            }            else            {                mObjPageList[i].SetActive(false);            }        }    }}


0 0
原创粉丝点击