Unity一键生成MVC框架

懒得创建GameObject,懒得创建Tag,懒得设置Tag,懒得添加脚本,懒得每次都要获取引用的懒癌患者福音

老规矩,不想看博客的直接下载,传送门

MVC简介:MVC

小项目就不建议用框架,避免过度设计。

上代码:
Model块:(数据、逻辑层)

using UnityEngine;
public class Model : MonoBehaviour
{
    
    
}

View块:(视图层)

using UnityEngine;
public class View : MonoBehaviour
{
    
    
    void Awake()
    {
    
    
    }
    void Start()
    {
    
    
    }
}

Control块:(控制中转层)

using UnityEngine;
public class Control : MonoBehaviour
{
    
    
    private Model _model;
    internal Model Model
    {
    
    
        get
        {
    
    
            if (_model != null)
            {
    
    
                return _model;
            }
            else
            {
    
    
                _model = GameObject.FindWithTag("Model").GetComponent<Model>();
                return _model;
            }
        }
        set
        {
    
    
            if (_model != null)
            {
    
    
                _model = value;
            }
            else
            {
    
    
                _model = GameObject.FindWithTag("Model").GetComponent<Model>();
                _model = value;
            }
        }
    }
    private View _view;
    internal View View
    {
    
    
        get
        {
    
    
            if (_view != null)
            {
    
    
                return _view;
            }
            else
            {
    
    
                _view = GameObject.FindWithTag("View").GetComponent<View>();
                return _view;
            }
        }
        set
        {
    
    
            if (_view != null)
            {
    
    
                _view = value;
            }
            else
            {
    
    
                _view = GameObject.FindWithTag("View").GetComponent<View>();
                _view = value;
            }
        }
    }
}

BaseControl:(父类,省去控制器每次都要获取中转控制层Control的麻烦,相关控制器只需继承即可)

using UnityEngine;
public class BaseControl : MonoBehaviour
{
    
    
    private Control _ctrl;
    internal Control Ctrl
    {
    
    
        get
        {
    
    
            if (_ctrl != null)
            {
    
    
                return _ctrl;
            }
            else
            {
    
    
                _ctrl = GameObject.FindWithTag("Control").GetComponent<Control>();
                return _ctrl;
            }
        }
        set
        {
    
    
            if (_ctrl != null)
            {
    
    
                _ctrl = value;
            }
            else
            {
    
    
                _ctrl = GameObject.FindWithTag("Control").GetComponent<Control>();
                _ctrl = value;
            }
        }
    }
}

GameManager层:(游戏控制层)

#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
public class GameManager : BaseControl
{
    
    
    void Awake()
    {
    
    
    }
    void Update()
    {
    
    
    }
    #region 动态创建tag、物体、挂载脚本
    [ContextMenu("添加设置标签")]
    void Add()
    {
    
    
#if UNITY_EDITOR
        AddTag<Model>("Model");
        AddTag<View>("View");
        AddTag<Control>("Control");
#endif
    }
    void AddTag<T>(string tag) where T : Component
    {
    
    
        if (!isHasTag(tag))
        {
    
    
            GameObject obj = new GameObject(tag);
            obj.AddComponent<T>();
            SerializedObject tagManager = new SerializedObject(obj);//序列化物体
            SerializedProperty it = tagManager.GetIterator();//序列化属性
            while (it.NextVisible(true))//下一属性的可见性
            {
    
    
                if (it.name == "m_TagString")
                {
    
    
                    //Debug.Log(it.stringValue);
                    it.stringValue = tag;
                    tagManager.ApplyModifiedProperties();
                }
            }
        }
    }
    bool isHasTag(string tag)
    {
    
    
        foreach (var t in UnityEditorInternal.InternalEditorUtility.tags)
        {
    
    
            if (t.Equals(tag))
                return true;
        }
        return false;
    }
    #endregion
}

主要做了什么:
导入GameManager预制体,点击一下即可一键生成、挂载、设置物体。
看图
一键生成
在这里插入图片描述
懒癌患者请收下

创建的时候只做了 没有tag的判断再创建。已有tag没做判断。想完善你们自己搞吧,搞完发我一份,谢谢

猜你喜欢

转载自blog.csdn.net/gheartsea/article/details/108636920