Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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# public int在另一个类中使用时具有不同的值_C#_Unity3d - Fatal编程技术网

C# public int在另一个类中使用时具有不同的值

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班有这个:

我的代码属于A类:

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
中声明的吗?@0xDECAFBAD
numberOfArrowsToWin
来自
A
,它可能是类A的一个实例。