【发布时间】:2021-11-03 14:40:47
【问题描述】:
我在从接口实现的方法中访问 SerializeField 时遇到问题。
public class UIManager : MonoBehaviour, IGameOver
{
[SerializeField]
public GameObject gamePlayPanel;
[SerializeField]
public GameObject gameOverPanel;
[Header("Score-board")]
public Text coinScoreText;
public Text diamondScoreText;
private static int coinScore, diamondScore;
public void EndGame(string reason)
{
Debug.LogError(gamePlayPanel); // returning NULL
Debug.Log("Game Over: UI Manager " + reason);
gamePlayPanel.SetActive(false);
gameOverPanel.SetActive(true);
}
}
界面如下图
public interface IGameOver
{
void EndGame(string reason);
}
有没有其他方法可以访问 EndGame() 方法中的 SerializeField,该方法被 IGameOver 接口覆盖
【问题讨论】:
-
你可以只检查空值:
if (gamePlayPanel != null) -
是的,但我需要访问 gamePlayPanel 字段,它在 EndGame() 之外工作。
-
界面与游戏对象面板无关。
-
@KlausGütter 虽然这可以防止异常本身,但它只是混淆了实际问题,使调试变得更加困难。该异常至少会立即告诉您出了什么问题,而不是根本没有发生任何事情;)
标签: c# unity3d interface observer-pattern