簡體   English   中英

將對象添加到Array Unity3d C#的奇怪行為#

[英]Strange behavior adding objects to Array Unity3d C#

在將對象添加到GameObjects數組時,我看到了一些奇怪的行為。 這是我的sudo代碼:

public class GameController : MonoBehaviour {
    public GameObject[] MyArray;

   void Awake() {
       Application.runInBackground = true;
       MyArray= new GameObject[144];
   }
    //some code that calls myFunction
   public  IEnumerator myFunction(float time)   
    {
       int counter = 0;
       GameObject card= AnotherArrayOfGameObjects[0];
       for (int j = 0; j < 144; j++)
        {
             card.name = "BLANK_" + (j+1);           
            Instantiate(card, cardVector, Quaternion.Euler(0, rotateAdujust, 180));
            MyArray[counter] = card;
            yield return new WaitForSeconds(time);
            counter++;
        }
    }

} 

這個功能很好用。 它創建我的對象並實例化它。 但是,當它將對象“card”添加到數組MyArray時,它不會正確添加它。 即,因為這是一個循環,0-143,我希望數組看起來像這樣:

MyArray[0] = "BLANK_1" 
MyArray[1] = "BLANK_2" 
....
MyArray[143] = "BLANK_144" 

相反,它看起來像這樣:

MyArray[0] = "BLANK_144" 
MyArray[1] = "BLANK_144" 
....
MyArray[143] = "BLANK_144" 

順便說一句,我可以看到這一切,因為我的代碼中的MyArray是一個公共變量,所以我可以在Unity的Inspector中看到它。 如果我調試,我可以看到每次迭代覆蓋前一次。 所以,在循環的第一次迭代中,我得到:

   MyArray[0] = "BLANK_1" 

然后在循環的第二次迭代中,我得到:

   MyArray[0] = "BLANK_2" 
   MyArray[1] = "BLANK_2" 

在第三個:

   MyArray[0] = "BLANK_3" 
   MyArray[1] = "BLANK_3" 
   MyArray[2] = "BLANK_3" 

直到它完成完整循環並且數組中的所有項目都說“BLANK_144”

任何人都可以解釋為什么會這樣嗎?

您在每次迭代時將相同的card對象添加到數組。 並且您在每次迭代時更改此對象的名稱。 因此,您最終會得到數組,其中所有項都指向同一個卡實例。 並且該卡實例具有您已分配的最新名稱(在最后一次迭代中):

MyArray[counter] = card;

記住 - Instantiate方法返回克隆對象,但它不會更改您正在克隆的對象。 因此,您在每次迭代時實例化新克隆,但不要將其保存在任何位置。

您應該添加到要實例化的陣列卡克隆:

GameObject card = AnotherArrayOfGameObjects[0];
for (int j = 0; j < 144; j++)
{
    var cardClone = Instantiate(card, cardVector, Quaternion.Euler(0, rotateAdujust, 180));
    cardClone.name = "BLANK_" + (j+1); 
    MyArray[j] = cardClone;
    yield return new WaitForSeconds(time);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM