我制作了這段代碼,它應該使變數current
彼此levelclicks
相等。但是,當我運行代碼時,情況并非如此。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Threading;
using System.Threading.Tasks;
public class GameManager : MonoBehaviour
{
public int current;
public int levelclicks;
public void IncreaseValue()
{
levelclicks = levelclicks 1;
}
void LevelUp()
{
levelclicks = current;
}
}
我很確定代碼沒有任何問題,但如果有,請告訴我。
uj5u.com熱心網友回復:
為什么它不起作用
current
和levelclicks
是兩個int,這是一個值型別(a struct
)。這意味著每個欄位都有一個獨立的值。
所以什么levelclicks = current;
是復制current
into的值levelclicks
。而levelclicks = levelclicks 1;
做的是增加 的價值levelclicks
。它不會改變 的值current
。
為什么即使它是參考型別也不起作用
即使您使用了參考型別 (a class
),它仍然不起作用,但出于另一個原因。
levelclicks = current;
確實會使兩個欄位參考同一個物件,如果您通過一個參考修改此物件,即使通過另一個參考訪問它也會給您修改后的物件。
但是levelclicks = levelclicks 1;
你會得到參考的levelclicks
物件,用 1 創建另一個物件,并將對這個新物件的參考保存在levelclicks
. 然后不再參考同一個物件levelclicks
。current
但是,如果您可以修改記憶體中的物件而不是創建新物件,那么它將起作用。但是,您不必保存參考(因為參考沒有改變)。它只是類似的東西levelclicks.Add(1);
,該方法將是 return void
。
回到你想做的事情。
為什么你想要兩個具有相同值的不同變數?如果你有充分的理由,在下面levelclicks = levelclicks 1;
,你可以添加
current = current 1;
current = levelclicks;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/483838.html
上一篇:有沒有辦法使用Animator更改TextMeshPro的文本內容?
下一篇:如何在DOTween中實作異步?