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

    实例

  • 相关阅读:
    奇数
    简单的登录基于代码的
    偶数
    寻找特定的值
    'k1': 大于66的所有值, 'k2': 小于66的所有值
    差数和
    day1
    页面滑动监听
    jq的ajax初级使用
    在vue中引入swiper
  • 原文地址:https://www.cnblogs.com/sanyejun/p/12115634.html
Copyright © 2011-2022 走看看