Unityワンクリック生成のMVCフレームワーク

ゲームオブジェクトの作成、タグの作成、タグの設定、スクリプトの追加、毎回怠惰ながん患者の引用された福音を入手するのが面倒

古いルール、ブログの直接ダウンロード、ポータルを見たくない

MVCの概要:MVC

設計し過ぎを避けるために小規模なプロジェクトにフレームワークを使用することは推奨されません。

上記のコード:
モデルブロック:(データ、ロジックレイヤー)

using UnityEngine;
public class Model : MonoBehaviour
{
    
    
}

ブロックを表示:(レイヤーを表示)

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

制御ブロック:(制御転送層)

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プレハブをインポートし、ワンクリックでオブジェクトを生成、マウント、設定します。
写真を見て、
ワンクリック生成
ここに画像の説明を挿入
怠惰ながん患者を受け入れてください

作成時はタグなしと判断して作成しました。既存のタグは判断されません。自分で改善したい場合は、完成後にコピーを送ってください、ありがとう

おすすめ

転載: blog.csdn.net/gheartsea/article/details/108636920