• 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;
            }
        }
    }

    实例

  • 相关阅读:
    pl/sql 导入csv到oracle时乱码问题
    mybatis if判断两个值是否相等存在的坑啊
    mybatis #与$占位符的区别
    NPM使用前设置和升级
    AWS ec2的ubuntu14.04上安装git服务
    Apache性能优化
    i5+GT730+B85安装OSX10.10.5 (Yosemite Install(14F27).cdr)
    IE的css hack
    sourcetree(mac)设置代理
    webpack配置的说明
  • 原文地址:https://www.cnblogs.com/sanyejun/p/12115634.html
Copyright © 2020-2023  润新知