偶発ゲーム開発

主にUnityでゲームを作ります。

UnityのMVPパターン、VisualScriptingとUnityEventの併用でメンドクササなくなる説

徒然なるままに無職のハツグウです。

タイトル通り、presenter一々定義すんのめんどくさいやんって

気持ちで試してみたもの。

 


public class Test : MonoBehaviour
{
   
    [SerializeField]
    private UnityEvent<string> _OnDisplay;
    [SerializeField]
    private int _HP = 0;

    public int HP { get => _HP; }



    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown("a"))
           _OnDisplay.Invoke(_HP.ToString());
    }
}
こんな感じのモデルがあったとしまして、

public class CustomEventer<T> : MonoBehaviour
{
    [SerializeField]
    private string eventName;

    [SerializeField]
    private GameObject target;

    [SerializeField]
    private Graph graph;


    public void InvokeEvent(T arguments){
         CustomEvent.Trigger(target,eventName,arguments);
    }
}
こういうカスタムイベント起動用のスクリプトを用意します。

あとはインスペクタ―で登録して、VisualScripting側でごにょごにょViewにつないでやれば完成です。これだとほぼ(ジェネリッククラスの継承以外)コード書かずに対応できそうですね。可長変引数は設定できないので、複数の場合はジェネリックのパラメータを配列で宣言する必要があります。
 
ただこの場合、毎回VisualScriptを通過するので考えものですね…。VisualScriptingでもラムダ式みたいなことができればいいんだけど。
なまぐさプログラマなのでどのくらいの負荷がかかるとかはわかんないです……。以上。