我正在努力使我的Canvas Manager工作,但即使在我制作一个Singleton之后它也会给我同样的错误。 这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class CanvasMgr : MonoBehaviour {
[SerializeField]
private GameObject defultUI;
[SerializeField]
private GameObject upgradeUI;
public GameObject UpgradeUI { get => upgradeUI; set => upgradeUI = value; }
public GameObject DefultUI { get => defultUI; set => defultUI = value; }
public static void Refresh () {
if (ValueHolder.upgrademenuopen){
DefultUI.SetActive (false);
UpgradeUI.SetActive (true);
}
if(!ValueHolder.upgrademenuopen){
DefultUI.SetActive (true);
UpgradeUI.SetActive (false);
}
}
}
编辑:谢谢,这是我的最终代码: 因为我懒惰,我最终变得愚蠢而不是为了更好的c#课程。如果我能给你一个教训:不要去简单的“5天编码课程”,而是去“综合c#课程”。谢谢。
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class CanvasMgr : MonoBehaviour {
private CanvasMgr() { }
private static CanvasMgr instance = null;
public static CanvasMgr Instance
{
get
{
if (instance == null)
{
instance = new CanvasMgr();
}
return instance;
}
}
[SerializeField]
private GameObject defultUI;
[SerializeField]
private GameObject upgradeUI;
public GameObject UpgradeUI { get => upgradeUI; set => upgradeUI = value; }
public GameObject DefultUI { get => defultUI; set => defultUI = value; }
public void Refresh () {
if (ValueHolder.upgrademenuopen){
DefultUI.SetActive (false);
UpgradeUI.SetActive (true);
}
if(!ValueHolder.upgrademenuopen){
DefultUI.SetActive (true);
UpgradeUI.SetActive (false);
}
}
}
答案 0 :(得分:3)
这不是单身人士课程。你应该这样做:
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class CanvasMgr : MonoBehaviour {
private CanvasMgr() { }
private static CanvasMgr instance = null;
public static CanvasMgr Instance
{
get
{
if (instance == null)
{
instance = new CanvasMgr();
}
return instance;
}
}
[SerializeField]
private GameObject defultUI;
[SerializeField]
private GameObject upgradeUI;
public GameObject UpgradeUI { get => upgradeUI; set => upgradeUI = value; }
public GameObject DefultUI { get => defultUI; set => defultUI = value; }
public void Refresh () {
if (ValueHolder.upgrademenuopen){
DefultUI.SetActive (false);
UpgradeUI.SetActive (true);
}
if(!ValueHolder.upgrademenuopen){
DefultUI.SetActive (true);
UpgradeUI.SetActive (false);
}
}
}`
现在你可以调用CanvasMgr.Instance.Refresh()。