繁体   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