Unity 实用工具

Unity 几个比较使用的工具类

Misc.cs

查找场景物体脚本

using UnityEngine;
using System.Collections.Generic;
using System.Collections;
using System;
using System.Text;
using UnityEngine.SceneManagement;


public class Misc
{

    static public GameObject findSceneRootObject(string _name)
    {
        Scene sc = SceneManager.GetActiveScene();
        GameObject[] root_obj = sc.GetRootGameObjects();
        for (int i = 0; i < root_obj.Length; ++i)
        {
            if (root_obj[i].name == _name)
            {
                return root_obj[i];
            }
        }
        return null;
    }


    //  大多能用到这个脚本     参数:父物体, 要查找物体的名字
    static public GameObject findChild(Transform _trans, string _child_name)
    {
        Transform child = _trans.Find(_child_name);
        if (child != null)
        {
            return child.gameObject;
        }
        GameObject go = null;
        int count = _trans.childCount;
        for (int i = 0; i < count; ++i)
        {
            child = _trans.GetChild(i);
            go = findChild(child, _child_name);
            if (go != null)
            {
                return go;
            }
        }
        return null;
    }


    static public List<GameObject> findChildAlls(Transform _trans, ref List<GameObject> _list)
    {
        for (int i = 0; i < _trans.childCount; ++i)
        {
            _list.Add(_trans.GetChild(i).gameObject);
        }
        return _list;
    }
    //


    static public List<GameObject> findChildAlls(Transform _trans, string _child_name, ref List<GameObject> _list)
    {
        if (_list != null)
        {
            GameObject child = findChild(_trans, _child_name);
            if (child != null)
            {
                for (int i = 0; i < child.transform.childCount; ++i)
                {
                    _list.Add(child.transform.GetChild(i).gameObject);
                }
            }
        }
        return _list;
    }


    static public T findParentComponent<T>(Transform _tran, string _parent_name) where T : Component
    {
        Transform parent = _tran.parent;
        while (parent != null)
        {
            T component = parent.GetComponent<T>();
            if (component != null)
            {
                return component;
            }
            else 
            {
                parent = parent.parent;
            }
        }
        return null;
    }


    

    static public List<T> findChildComponent<T>(Transform _trans, ref List<T> _list)
    {
        if (_list != null)
        {
            Transform child = null;
            int count = _trans.childCount;
            for (int i = 0; i < count; ++i)
            {
                child = _trans.GetChild(i);
                if (child.GetComponent<T>() != null)
                {
                    _list.Add(child.GetComponent<T>());
                }
            }
        }
        return _list;
    }

    static public List<T> findChildAllsComponent<T>(Transform _trans, ref List<T> _list) where T : Component
    {
        if (_list != null)
        {
            Transform child = null;
            int count = _trans.childCount;
            for (int i = 0; i < count; ++i)
            {
                child = _trans.GetChild(i);
                if (child.GetComponent<T>() != null)
                {
                    _list.Add(child.GetComponent<T>());
                }
                findChildAllsComponent<T>(child, ref _list);
            }
        }
        return _list;
    }


    static public List<T> findChildAllsComponent<T>(Transform _trans, string _child_name, ref List<T> _list) where T : Component
    {
        if (_list != null)
        {
            GameObject child = findChild(_trans, _child_name);
            if (child != null)
            {
                findChildAllsComponent<T>(child.transform, ref _list);
            }
        }
        return _list;
    }

    //
    static public T findChildComponent<T>(Transform _trans, string _child_name) where T : Component
    {
        GameObject go = findChild(_trans, _child_name);
        if (go != null)
        {
            return go.GetComponent<T>();
        }
        return null;
    }

   
}

MonoSingleton.cs

继承MonoBehaviour的单例
继承该脚本,其脚本就附有单例效果

using UnityEngine;
using System.Collections;

public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
    static private T s_instance = null;

    protected bool m_initial_flg = false;

    public bool isInitial()
    {
        return m_initial_flg;
    }

    //
    public void Awake()
    {
        if (s_instance == null)
        {
            s_instance = this as T;
        }
        initial();
    }

    protected virtual void initial()
    {
     
    }
    //

    //
    static public T getSingleton()
    {
        return s_instance;
    }
}


UI工具

BasePanel.cs

using UnityEngine;
using System.Collections;

public class BasePanel : MonoBehaviour {
	//皮肤路径
	public string skinPath;
	//皮肤
	public GameObject skin;
	//层级
	public PanelManager.Layer layer = PanelManager.Layer.Panel;
	//初始化
	public void Init(){
		//皮肤
		GameObject skinPrefab = ResManager.LoadPrefab(skinPath);
		skin = (GameObject)Instantiate(skinPrefab);
	}
	//关闭
	public void Close(){
		string name = this.GetType().ToString();
		PanelManager.Close(name);
		DebugLog(name);
	}

	//初始化时
	public virtual void OnInit(){
	}
	//显示时
	public virtual void OnShow(params object[] para){
	}
	//关闭时
	public virtual void OnClose(){
	}
	public static void DebugLog(string name)
	{
		Debug.Log(name);
	}
}

PanelManager.cs;

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public static class PanelManager{
	//Layer
	public enum Layer{
		Panel,
		Tip,
	}
	//层级列表
	private static Dictionary<Layer, Transform> layers = new Dictionary<Layer, Transform>();
	//面板列表
	public static Dictionary<string, BasePanel> panels = new Dictionary<string, BasePanel>();
	//激活面板列表
	public static List<string> NowPanels = new List<string>();
	//结构
	public static Transform root;
	public static Transform canvas;
	//当前激活面板参数
	public static string PanelName;
	//初始化
	public static void Init(){
		root = GameObject.Find("Root").transform;
		canvas = root.Find("Canvas");
		Transform panel = canvas.Find("Panel");
		Transform tip = canvas.Find("Tip");
		layers.Add(Layer.Panel, panel);
		layers.Add(Layer.Tip, tip);
	}

	//打开面板
	public static void Open<T>(params object[] para) where T:BasePanel{
		//已经打开
		string name = typeof(T).ToString();
		if (panels.ContainsKey(name)){
			return;
		}
		//组件
		BasePanel panel = root.gameObject.AddComponent<T>();
		panel.OnInit();
		panel.Init();
		//父容器
		Transform layer = layers[panel.layer];
		panel.skin.transform.SetParent(layer, false);
		//列表
		panels.Add(name, panel);
		//OnShow
		panel.OnShow(para);
		PanelName = name;
	}
	public static void CloseAll()
    {
        foreach (string  key in panels.Keys)
        {
			NowPanels.Add(key);

		}
        foreach (var item in NowPanels)
        {
			Close(item);
        }

	}
	public static void Resert()
    {
		layers.Clear();
		panels.Clear();
    }
	//关闭面板
	public static void Close(string name){
		//没有打开
		if(!panels.ContainsKey(name)){
			return;
		}
		BasePanel panel = panels[name];

		//OnClose
		panel.OnClose();
		//列表
		panels.Remove(name);
		//销毁
		GameObject.Destroy(panel.skin);
		Component.Destroy(panel);
	}

	
}

ResManager

using UnityEngine;

public class ResManager : MonoBehaviour {

	//加载预设
	public static GameObject LoadPrefab(string path){
		return Resources.Load<GameObject>("MoKuai/"+path);
	}
}

UI工具使用前,需要先调用PanelManager.Init()方法进行初始化,其场景中需要有命名Root,Canvas,Panel,Tip的物体如图:
在这里插入图片描述
注意 把UI做成Prefab,放入文件夹后,加载时需要 预制体的名字与脚本名字一致,一个预制体一个脚本,其脚本须继承BasePanel

最后

这只是项目里用的其中几个,如有需要我会继续更新

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值