在 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 Studio 中为此创建代码片段以减少样板,或任何其他花哨的技巧来自动化编写这些函数的过程?
目前,我未完成的尝试使用 Xamarin 编辑器模板如下所示:
public static $classname$ Construct(){
}
其中 $classname$ 调用一个函数来获取当前类的名称。我认为实际上不可能在函数头中列出类的标识符。
只是为了先发制人:我知道可以创建不从 MonoBehaviour 派生的类,但让我们假设这个类实际上需要 GameObject 的功能。