通常情况下,我会用另一种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
等一样独特的monobehaviour应该有一个静态实例,因为它们只在场景中存在一次而我没有多次为此参考设置检查器字段。
使用静态实例有更好的方法吗?
答案 0 :(得分:1)
使用此代码时,可能会出现一些问题,因为实例是 在Start方法中设置。如果其他组件可能为时已晚 在执行自己的Start方法时需要引用
是的,但这就是我们拥有li:first-child {
color: var(--oc-green);
}
功能的原因。设置初始化Awake
函数,在Awake
函数中读取它。在调用Start
之前,将在每个脚本上调用Awake
函数。
Start
其余代码应保持不变。