unity,C#各种管理类(二)-- UI管理

10 篇文章 0 订阅


1.UI,中心点,画布,枚举值
//当前工程的窗口文件的枚举值

//UI
public enum WinType 
{
    BagWin,
    ButtonWin,
    HeadWin,
    InfoDetalWin,
    OptWin,
    ToyStickWin

}
//挂载点
public enum HangPoint
{
    LeftTop,
    LeftMiddle,
    LeftButton,
    MiddleTop,
    MiddleMidle,
    MiddleButton,
    RightTop,
    RightMiddle,
    RightButton
}
//画布
public enum CanvasType
{
    NormalCanvas,
}

2.UI窗口管理类
using UnityEngine;
using System.Collections;

//UI窗口管理类
public class WinLoadMgr : Singleton<WinLoadMgr> //省七行代码
{
    //用一个哈希表存放所有加载过得窗口
    private Hashtable m_PrafabTables;

    //构造函数
    public WinLoadMgr ()
    {
        m_PrafabTables = new Hashtable ();
    }

    //面向用户的方法
    //参数:win:表示加载那个窗口,hangPoint挂载的点,canvas画布,isCache是否缓存
    public GameObject LoadWin (WinType win, HangPoint hangPoint = HangPoint.MiddleMidle,
                               CanvasType canvas = CanvasType.NormalCanvas, bool isCache = false)
    {
        //定义一个空物体
        GameObject winObj = null;
        //接收窗口名称
        string winName = win.ToString ();
        //接收画布名称
        string canvasName = canvas.ToString ();

        //1.寻找Canvas
        GameObject can = GameObject.Find ("/" + canvasName);
        if (can == null) {
            can = GameObject.Find ("/" + canvasName + "(Clone)");
        }

        //2.加载窗口
        //如果哈希表里面存在当前的UI窗口
        if (m_PrafabTables.Contains (winName) && isCache) {
            winObj = m_PrafabTables [winName]as GameObject;
        } else {
            //如果没有就通过名称和类型动态加载出来,ResourcesMgr是提前写好的动态加载类
            winObj = ResourcesMgr.Instance.Load<GameObject> (win);
            if (isCache) {
                //缓存到哈希表里面
                m_PrafabTables.Add (winName, winObj);
            }
        }

        //3.实例化窗口(克隆)
        winObj = GameObject.Instantiate (winObj);

        //4.调整UI中心点
        Vector2 pivot = new Vector2 (0.5f, 0.5f);
        switch (hangPoint) {
        case HangPoint.LeftTop://左上
            {
                pivot = new Vector2 (0, 1f);
                break;
            }
        case HangPoint.LeftButton://左下
            {
                pivot = new Vector2 (0, 0);
                break;
            }
        case HangPoint.LeftMiddle://左中
            {
                pivot = new Vector2 (0, 0.5f);
                break;
            }
        case HangPoint.MiddleButton://中下
            {
                pivot = new Vector2 (0.5f, 0f);
                break;
            }
        case HangPoint.MiddleMidle://中心
            {
                pivot = new Vector2 (0.5f, 0.5f);
                break;
            }
        case HangPoint.MiddleTop://中上
            {
                pivot = new Vector2 (0.5f, 1f);
                break;
            }
        case HangPoint.RightButton://右下
            {
                pivot = new Vector2 (1f, 0);
                break;
            }
        case HangPoint.RightMiddle://有中
            {
                pivot = new Vector2 (1f, 0.5f);
                break;
            }
        case HangPoint.RightTop://右上
            {
                pivot = new Vector2 (1f, 1f);
                break;
            }
        default:
            {
                //默认中心
                pivot = new Vector2 (0.5f, 0.5f);
                break;
            }
        }
        //最终赋值给UI窗口
        winObj.GetComponent<RectTransform> ().pivot = pivot;

        //6.设置挂点,挂电视提前设置好的预设体,名称要一致
        Transform parent = can.transform.Find (hangPoint.ToString ());
        //设置成挂点的子物体
        winObj.transform.SetParent (parent);
        //指定位置
        winObj.transform.localPosition = Vector3.zero;
        //规定大小
        winObj.transform.localScale = Vector3.one;

        return winObj;
    }

    public override void Dispose ()
    {
        base.Dispose ();
        //清除哈希表,释放没有用到的资源
        m_PrafabTables.Clear ();
        Resources.UnloadUnusedAssets ();
    }
}

3.资源加载类
using UnityEngine;
using System.Collections;

// 通过用户传递进来的枚举值, 自动的分析出该枚举值对应的资源在哪个路径下.
public class ResourcesMgr : Singleton<ResourcesMgr>
{
    // 面向用户的方法:  方法名<T>指定类型
    /// <summary>
    /// 返回用户需要的资源.
    /// </summary>
    /// <param name="enumName">Enum name.</param>
    /// <typeparam name="T">The 1st type parameter.</typeparam>
    public T Load<T> (object enumName) where T : Object
    {
        // 获取枚举类型的字符串形式
        string enumType = enumName.GetType ().Name;

        //空的字符串
        string filePath = string.Empty;

        switch (enumType) {
        case "Feeds":
            {
                filePath = "Music/Feeds/" + enumName.ToString ();
                break;
            }
        case "Items":
            {
                filePath = "Music/Items/" + enumName.ToString ();
                break;
            }
        case "Main":
            {
                filePath = "Music/Main/" + enumName.ToString ();
                break;
            }
        case "Monsters":
            {
                filePath = "Music/Monsters/" + enumName.ToString ();
                break;
            }
        case "Towers":
            {
                filePath = "Music/Towers/" + enumName.ToString ();
                break;
            }
        case "WinType":   //UI类型
            {
                filePath = "UIWin/" + enumName.ToString ();
                break;
            }
        default:
            {
                break;
            }
        }

        return Resources.Load<T> (filePath);
    }
}

应用:





  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值