Unity での C# でのプログラミングには、膨大な量のボイラープレートが必要です。これは、一部は C# によるものですが、エンジン自体の設計上の決定によるものでもあります。
MonoBehaviours を自分で構築できないという事実は、正しい初期化を強制するために、次のようにコードを記述する必要があることを意味します。
using System;
using System.Collections.Generic;
using UnityEngine;
public class MyClass : MonoBehaviour
{
private int a;
private float b;
private string c;
private List<int> lst;
public static MyClass Construct (int a, float b, string c,List<int> lst)
{
//Boiler-plate stuff
var go = new GameObject ();
var mc = go.AddComponent<MyClass> ();
/*
* This part is fugly. The static method is setting
* fields on the object. The responsibility to be
* fully initialized after construction should
* lie on the object.
* I could easily forget to set fields from the
* outside.
*/
mc.a = a;
mc.b = b;
mc.c = c;
mc.lst = lst;
return mc;
}
//Same as above, but this time without constructing a new GameObject.
public static MyClass AddTo (GameObject go,int a, float b, string c,List<int> lst)
{
var mc = go.AddComponent<MyClass> ();
mc.a = a;
mc.b = b;
mc.c = c;
mc.lst = lst;
return mc;
}
}
Xamarin スタジオでこのコード スニペットを作成してボイラー プレートを削減する方法、またはこれらの関数を記述するプロセスを自動化するその他の巧妙なトリックはありますか?
私の未完成の試みは現在、Xamarin エディター テンプレートで次のようになっています。
public static $classname$ Construct(){
}
$classname$ は、関数を呼び出して現在のクラスの名前を取得します。関数ヘッダーにクラスの識別子をリストすることは実際には不可能だと思います。
人々を先取りするために: MonoBehaviour から派生していないクラスを作成できることは知っていますが、このクラスが実際にゲームオブジェクトの機能を必要としていると仮定しましょう。