【发布时间】:2016-07-03 07:05:34
【问题描述】:
在 Unity C# 脚本中,我有一个单例游戏控制器对象,其中存储了游戏变量,但在成员函数中访问它们时出现了奇怪的行为。它打印初始化值,而不是当前值。然而,在更新功能中,它每帧打印正确的值。我总结了下面的课程。控制器类对自身有一个静态引用。如果您需要了解其他详细信息,可以询问。我是 C# 和 Unity 的新手,所以我可能缺乏一些明显的答案。
谢谢
public class controller : MonoBehaviour {
public int[] star = new int[64];
void Start(){ /* calls another function to set 0 for each star index */ }
void Update(){ // during gameplay star[0] gets a value of 1
print(star[0]); // prints correct value which is 1
}
public void checkValue(){
print(star[0]); // prints 0 incorrectly which should be 1
}
}
【问题讨论】:
-
我找到了问题,但我不知道如何解决它。 checkValue 函数在按下按钮时运行,如果从更新中调用它,它会返回正确的值。不知道是什么原因造成的
-
Start 应该是无操作的,因为无论如何数组都被初始化为零。否则会发生在这个 sn-p 代码中不可见的事情。
-
在所有情况下是否都是
controller的同一个实例。当您使用非静态成员star时,每个实例都有自己的字段(“类变量”)。 -
@JeppeStigNielsen 是的,它与第一次创建的实例相同。请阅读我在其他答案中的评论,我需要知道如何解决它。
-
只是为了确保:您说的是单例,但这段代码没有实现该模式。你在别的地方有吗? unity中的单例很容易实现。