Unity Component ideological framework is very easy to use

Modified versions of the generations

Modular design

 

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) the Activator.CreateInstance (type); 
        
        IF (! compDic.ContainsKey (type)) 
        { 
            compDic.Add (type, T); 
        } 
        the else 
        { 
            Debug.LogError ( " can not add components " ); 
        } 
        
        return T; 
    } 
    
    ///  <Summary> 
    /// Add MonoBehaviour component script hanging in the scene
     ///  </ 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) the Activator.CreateInstance (type); 
        
        IF (! CompDic.ContainsKey (type)) 
        { 
            compDic.Add (type, T); 
        } 
        the else 
        { 
            Debug.LogError ( " can not add components " ); 
        } 
        
        return T; 
    } 
    
    ///  <Summary> 
    /// Add MonoBehaviour component script hanging in the scene
     ///  </ Summary> 
    ///  <typeParam name = "T"> </ typeParam> 
    ///  <Returns> </ Returns> 
    public T AddMonoComp <T> () WHERE T: MonoBehaviourMonoBehaviour
    {
        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;
        }
    }
}

 

Examples

 

Guess you like

Origin www.cnblogs.com/sanyejun/p/12115634.html