Unity中的C#属性:设置行为异常的值



我正在努力更好地理解属性的使用,尤其是在Unity游戏引擎中。我要做的很简单:有一个类叫做"敌人"每次它被初始化(即派生(时,必须访问类GameSession并增加计数器字段的值";numSpawnedEnemies";,然而,我希望通过该物业";NumSpawnedEnemies";。

注意:GameSession是一个单例(即只存在一个实例(,但为了简单起见,我省略了相关代码。

public class GameSession : MonoBehaviour
{
int numSpawnedEnemies = 0;


public int NumSpawnedEnemies
{
get
{
return numSpawnedEnemies;
}
set
{
Debug.Log("Value: " + value); // Just for debugging purpose
numSpawnedEnemies += value;
}
}
}

在Enemy类中,我在Start((方法中这样做(即Unity为Enemy类别的每个实例自动提示的方法(:

gameSession = FindObjectOfType<GameSession>();
// Unity function searching for the instance of GameSession
gameSession.NumSpawnedEnemies += 1;

然而,结果并不是我所期望的:事实上,计数器";numSpawnedEnemies"每次x2(即1、2、4、8、16、32、64…(时都会增加,而不是+1。这是因为,正如debug.console函数所示;值";实际上是1、2、4等

将集合{}中的值设置为0(在将其值分配给numSpawnedEnemies之后(不会更改任何内容,但即使会更改,也无法向我解释这种行为(事实上,我希望每次访问该属性时都会重置它(。

如果我简单地将numSpawnedEnemies设置为public,并从Enemy类中增加这个字段,它就可以很好地工作。问题是:

  1. 那是怎么回事"值";是否跟踪以前的值?(不是每次我从某个点访问该属性时都应该"重置"吗?(
  2. 如果问题1的答案是这是一种正常行为,为什么它每次都会增加x2

提前感谢!

您在属性和使用它的敌人上都有+=。

在属性中替换

numSpawnedEnemies+=值;

numSpawnedEnemies=值;

类似@皮诺·德·弗朗西斯科说

中的属性更改声明

numSpawnedEnemies += value;

numSpawnedEnemies = value;

解释

您可以将属性视为"Get"one_answers"Set"方法,具体取决于您的implement。所以你的NumSpawnedEnemies就像一样

void NumSpawnedEnemies(int value){
numSpawnedEnemies += value;
}
int NumSpawnedEnemies(){ return numSpawnedEnemies;}

那么如果你调用NumSpawnedEnemies+=1等于您通过numberSpanwedEnemies+1作为值至繁殖的敌人数量(int值(

那么你陈述的最后一个方程式就是

numberSpawnedEnemies = numberSpawnedEnemies + value
numberSpawnedEnemies = numberSpawnedEnemies + (numberSpawnedEnemies + 1)

这就是为什么你每次打的结果都是双倍的原因

相关内容

  • 没有找到相关文章

最新更新