zoukankan      html  css  js  c++  java
  • Unity组件式思想框架 非常好用

    改良了几代版本

    组件式设计思想

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Entity
    {
        public static Dictionary<Type, object> compDic = new Dictionary<Type, object>();
        
        /// <summary>
        /// 添加组件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T AddComp<T>() where T : new()
        {
            Type type = typeof (T);
            T t = (T)Activator.CreateInstance(type);
            
            if (!compDic.ContainsKey(type))
            {
                compDic.Add(type, t);
            }
            else
            {
                Debug.LogError("不能重复添加组件");
            }
            
            return t;
        }
        
        /// <summary>
        /// 添加挂在场景中的MonoBehaviour组件脚本
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T AddMonoComp<T>() where T : MonoBehaviour
        {
            Type type = typeof (T);
            T t = UnityEngine.Object.FindObjectOfType<T>();
            if (t == null)
            {
                GameObject go = new GameObject(typeof(T).ToString());
                t = go.AddComponent<T>();
            }
            if (!compDic.ContainsKey(type))
            {
                compDic.Add(type, t);
            }
            else
            {
                Debug.LogError("不能重复添加组件");
            }
    
            return t;
        }
        
        /// <summary>
        /// 获取组件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T GetComp<T>()
        {
            Type type = typeof (T);
            try
            {
                return (T)compDic[type];
            }
            catch (Exception e)
            {
                Debug.LogError(e);
                throw;
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class EntityMono : MonoBehaviour
    {
        public Dictionary<Type, object> compDic = new Dictionary<Type, object>();
        
        /// <summary>
        /// 添加组件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public T AddComp<T>() where T : new()
        {
            Type type = typeof (T);
            T t = (T)Activator.CreateInstance(type);
            
            if (!compDic.ContainsKey(type))
            {
                compDic.Add(type, t);
            }
            else
            {
                Debug.LogError("不能重复添加组件");
            }
            
            return t;
        }
        
        /// <summary>
        /// 添加挂在场景中的MonoBehaviour组件脚本
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public T AddMonoComp<T>() where T : MonoBehaviour
        {
            Type type = typeof (T);
            T t = UnityEngine.Object.FindObjectOfType<T>();
            if (t == null)
            {
                GameObject go = new GameObject(typeof(T).ToString());
                t = go.AddComponent<T>();
            }
            if (!compDic.ContainsKey(type))
            {
                compDic.Add(type, t);
            }
            else
            {
                Debug.LogError("不能重复添加组件");
            }
    
            return t;
        }
        
        /// <summary>
        /// 获取组件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public T GetComp<T>()
        {
            Type type = typeof (T);
            try
            {
                return (T)compDic[type];
            }
            catch (Exception e)
            {
                Debug.LogError(e);
                throw;
            }
        }
    }

    实例

  • 相关阅读:
    [置顶] 签名时出错: 未在路径 C:Program Files (x86)Microsoft SDKsWindowsv7.0Ainsigntool.exe 找到 SignTool.ex
    频繁绑定DataGridView的DataSource却不正常显示
    生产者消费者模型 android
    Android Studio安装插件的三种方式
    Android Studio插件安装
    数据调试~~TCP转串口、串口转TCP调试
    Socket看法
    android颜色color.xml设置
    博客导航——一站式搜索
    dx.jar文件问题,有没有同学知道怎么解决呀,这一步没法解决,后面就没办法跟着做了
  • 原文地址:https://www.cnblogs.com/sanyejun/p/12115634.html
Copyright © 2011-2022 走看看