在Unity中,通过单例调用的方法中如果包含已初始化的GameObject,则调用后为null而报错,这时应该使用委托的方式,举例:
public delegate void PanelDelegate(string column);
public static PanelDelegate panelShowNormal;
void Start () {
public GameObject Toast;
Toast.SetActive(false);
panelShowNormal += ShowToast;
}
public void ShowToast(string Column) {
Toast.SetActive(true);
Toast.transform.GetChild(0).gameObject.GetComponent().text = Localization.Get(Column);
}
上述代码,分别用下列两种方式调用:
PanelManager.panelShowNormal(“updateSuccess”); //调用成功,执行成功
SingleTon.Instance.ShowToast(“updateSuccess”); //调用成功,执行失败,Toast报null
结论:当涉及到有GameObject的时候,使用委托而不使用单例。