C# public int在另一个类中使用时具有不同的值
我的代码属于A类:C# public int在另一个类中使用时具有不同的值,c#,unity3d,C#,Unity3d,我的代码属于A类: public int numberOfArrowsToWin=5; private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Wheel")) { numberOfArrowsToWin--; } } Update() { Debug.Log(numberOfArrowsToWin) } 我在B班有这个:
public int numberOfArrowsToWin=5;
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Wheel"))
{
numberOfArrowsToWin--;
}
}
Update()
{
Debug.Log(numberOfArrowsToWin)
}
我在B班有这个:
[SerializeField]
private Text InGameArrowCounter;
private int totalArrowNumber;
private void Start()
{
totalArrowNumber = A.numberOfArrowsToWin;
}
private void Update()
{
Debug.Log(numberOfArrowsToWin);
InGameArrowCounter.text = "left: " + A.numberOfArrowsToWin.ToString() + " / " + totalArrowNumber.ToString();
}
因此,类A中的Debug.Log给了我5 4 3 2 1 0;
B类中的调试给了我5 4
我不明白为什么这些值是不同的!请帮助嗯,内存堆和堆栈内存有两种类型。 堆内存存储静态变量和方法。 和堆栈内存存储非静态值和方法 如果我们在另一个类中创建一个类的实例或对象,它会为另一个类创建完全相同的值 如果要精确计算相同的值,必须为该变量提供一个引用。或者让它静止 在您的例子中,您的类A更改了该公共变量的值,但您的类B在上次访问时得到了相同的值 使用 B类:单一行为 { //代码 totalArrowNumber=(findgameobjectWichHaveClassA).GetComponent().numberOfArrowsToWin; //代码
}当您使用
totalArrowNumber=A.numberOfArrowsToWin
使您的totalArrowNumber
等于numberOfArrowsToWin
的值,而不等于运算符本身的值
因此,当更改numberOfArrowsToWin
时,totalarrowstown
将不会生效,并且仍然是您给出的最后一个值
要解决此问题,您可以:
使totalArrowNumber=numberOfArrowsToWin;在更新方法内部
它是这样的:
void Update()
{
totalArrowNumber = A.numberOfArrowsToWin;
}
类B引用的
A
是否与类A相同?如果它是一个不同的实例,那么是的,它将有一个不同的值。你是说Debug.Log(a.numberOfArrowsToWin)
中的B
?可能有助于显示这两个类的所有相关部分。其中numberOfArrowsToWin
是在类B
中声明的吗?@0xDECAFBADnumberOfArrowsToWin
来自A
,它可能是类A的一个实例。