Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这不计算玩家正确收集的点数?_C#_Unity3d_Variables - Fatal编程技术网

C# 为什么这不计算玩家正确收集的点数?

C# 为什么这不计算玩家正确收集的点数?,c#,unity3d,variables,C#,Unity3d,Variables,我正在制作一个类似于本教程的游戏: 我正在尝试实现可收集的对象,在一个级别上为您提供更多的点数,其中3个点数,因此我使用了一个变量gemCounter,每当玩家与宝石碰撞时,该变量将增加1 怎么了?在每个触发器上,代码返回1作为结果 GemTrigger的每个实例都有自己的gemCounter字段副本,因为它不是静态字段 您可以使用的一个更改是使用以下命令使gemCounter保持静态: public static int gemCounter = 0; 或者,更好的方法是,将gemCount

我正在制作一个类似于本教程的游戏:

我正在尝试实现可收集的对象,在一个级别上为您提供更多的点数,其中3个点数,因此我使用了一个变量gemCounter,每当玩家与宝石碰撞时,该变量将增加1

怎么了?在每个触发器上,代码返回1作为结果

GemTrigger的每个实例都有自己的gemCounter字段副本,因为它不是静态字段

您可以使用的一个更改是使用以下命令使gemCounter保持静态:

public static int gemCounter = 0;

或者,更好的方法是,将gemCounter放在一个中,让所有GetTrigger实例修改该单例中的gemCounter。

另一个选项是将gemCounter附加到播放器对象。然后,您可以用player标记播放器,并添加一个可能称为PlayerController的脚本并使用它

GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>().gemCounter+= 1;

这将允许您跟踪玩家的宝石计数器,而不是每个宝石上的计数器。

此计数器应该是玩家的属性。触发器保持这样的计数是没有意义的。谢谢,我还在想,我是多么愚蠢,在没有公共数据的情况下尝试静态int。。。
GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>().gemCounter+= 1;