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

  大家好!我是小唐,很多人都做游戏过程中会遇到一些比如说运营活动,有好多活动,点击每个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 mObjPageList = new List();

    /// 
    /// 点击Button调用的方法
    /// 
    /// 点击Button的id
    void OnClickButton(int _id)
    { 
        //为了测试id这里我直接用数字表示了,这里条件不唯一,只要能区分出你点击的Button就Ok
        if (_id==1)
        {
            OpenPage("Page1", ref mButton1Page);
        }
        else if (_id==2)
        {
	    OpenPage("Page2", ref mButton2Page);
        }
        else if (_id == 3)
        {
	    OpenPage("Page3", ref mButton3Page);
        }
        else if (_id == 4)
        {
	    OpenPage("Page4", ref mButton4Page);
        }
        else if (_id == 5)
        {
	    OpenPage("Page5", ref mButton5Page);
        }
    }

    /// 
    /// 打开页面
    /// 
    /// 泛型T(这里是实例化页面附加的脚本)
    /// 页面Prefab的Name
    /// 要打开的页面
    /// 
    GameObject OpenPage(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();
            if (t == null)
            {
                t = _obj.gameObject.AddComponent();
            }
            if (!mObjPageList.Contains(_obj))
            {
                mObjPageList.Add(_obj);
                SetPageState(_obj);
            }
        }
        else
        {
            SetPageState(_obj);
        }
        return _obj;
    }

    /// 
    /// 激活关闭页面
    /// 
    /// 
    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);
            }
        }
    }
}


你可能感兴趣的:(Unity,UI)