【发布时间】:2018-06-06 02:33:59
【问题描述】:
通常我会以这种方式调用另一个 Monobehaviour 的方法
[SerializeField]
private OtherScript s;
private void Start()
{
s.DoSomething();
}
我也想过这样的事情
public class OtherScript : MonoBehaviour
{
public static OtherScript Instance { get { return this; } }
public void DoSomething()
{
Debug.Log("Call");
}
}
然后我可以通过这种方式从其他脚本中调用该方法
OtherScript.Instance.DoSomething();
但我不能将this 作为静态属性返回。解决方法是这样的
public class OtherScript : MonoBehaviour
{
private static OtherScript instance;
public static OtherScript Instance { get { return instance; } }
private void Start()
{
instance = this;
}
public void DoSomething()
{
Debug.Log("Call");
}
}
使用此代码时可能会出现一些问题,因为实例是在Start 方法中设置的。如果其他组件在执行自己的Start 方法时需要引用,这可能为时已晚。
所有像GameManager、GameObserver、IngameMenu 等唯一的单一行为都应该有一个静态实例,因为它们在场景中只存在一次,我不必为此参考设置检查器字段多次。
有没有更好的使用静态实例的方法?
【问题讨论】: