统一中的C#属性:集值行为异常
我试图更好地理解属性的使用,特别是在Unity游戏引擎中。 我必须做的很简单:有一个叫做“敌人”的类,每次实例化(即繁殖)它时,必须访问该类GameSession并增加计数器字段“NumSpawnedEquaries”的值,但我希望通过属性“NumSpawnedEquaries”访问该类 注意:GameSession是一个单例(即仅存在一个实例),但为了简单起见,我省略了相关代码统一中的C#属性:集值行为异常,c#,unity3d,properties,C#,Unity3d,Properties,我试图更好地理解属性的使用,特别是在Unity游戏引擎中。 我必须做的很简单:有一个叫做“敌人”的类,每次实例化(即繁殖)它时,必须访问该类GameSession并增加计数器字段“NumSpawnedEquaries”的值,但我希望通过属性“NumSpawnedEquaries”访问该类 注意:GameSession是一个单例(即仅存在一个实例),但为了简单起见,我省略了相关代码 public class GameSession : MonoBehaviour { int num
public class GameSession : MonoBehaviour
{
int numSpawnedEnemies = 0;
public int NumSpawnedEnemies
{
get
{
return numSpawnedEnemies;
}
set
{
Debug.Log("Value: " + value); // Just for debugging purpose
numSpawnedEnemies += value;
}
}
}
在敌方类中,我在Start()方法(即Unity为敌方类的每个实例自动提示的方法)中执行此操作:
gameSession=FindObjectOfType();
//Unity函数搜索GameSession实例
gameSession.numsPawnedFeeds+=1;
然而,结果并不是我所期望的:事实上,每次x2(即1、2、4、8、16、32、64…)而不是+1时,计数器“numspawnedEquires”都会增加。这是因为,如debug.console函数所示,“value”的值实际上是1、2、4等等
将集合{}中的值设置为0(在将其值指定给numspawnedDefauries之后)不会改变任何东西,但即使它会改变,也不会向我解释这种行为(事实上,我希望每次访问属性时都会重置它)
如果我简单地将numspawnedDeburies设置为public,并从敌方类中增加这个字段,那么效果很好。
问题是:
提前谢谢 你的财产和使用它的敌人都有+= 在属性中替换 numsPawnedFeeds+=值 与 nums pawnedfeeds=值 短解类 @弗朗西斯科皮诺说 属性中的更改语句
numSpawnedEnemies += value;
到
解释
您可以将属性视为“Get”和“Set”方法,具体取决于您的实现。
所以你的敌人就像
void NumSpawnedEnemies(int value){
numSpawnedEnemies += value;
}
int NumSpawnedEnemies(){ return numSpawnedEnemies;}
那么,如果你调用numspawnedDegrees+=1
它等于您将数值PanwedEquires+1作为值传递
到numspawnedTokens(int值)
那么你们陈述的最后一个等式是
numberSpawnedEnemies = numberSpawnedEnemies + value
numberSpawnedEnemies = numberSpawnedEnemies + (numberSpawnedEnemies + 1)
这就是为什么每次打电话时,您的成绩都是原来的两倍非常感谢!我想这是一个很小的初学者的错误。也谢谢你的详细解释!
void NumSpawnedEnemies(int value){
numSpawnedEnemies += value;
}
int NumSpawnedEnemies(){ return numSpawnedEnemies;}
numberSpawnedEnemies = numberSpawnedEnemies + value
numberSpawnedEnemies = numberSpawnedEnemies + (numberSpawnedEnemies + 1)