ゲームオブジェクトの作成、タグの作成、タグの設定、スクリプトの追加、毎回怠惰ながん患者の引用された福音を入手するのが面倒
古いルール、ブログの直接ダウンロード、ポータルを見たくない
設計し過ぎを避けるために小規模なプロジェクトにフレームワークを使用することは推奨されません。
上記のコード:
モデルブロック:(データ、ロジックレイヤー)
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プレハブをインポートし、ワンクリックでオブジェクトを生成、マウント、設定します。
写真を見て、
怠惰ながん患者を受け入れてください
作成時はタグなしと判断して作成しました。既存のタグは判断されません。自分で改善したい場合は、完成後にコピーを送ってください、ありがとう