Добавление Gameobject в список - PullRequest
0 голосов
/ 12 марта 2020
List<GameObject> myObjects = new List<GameObject>();
public GameObject prefab;
GameObject copyPrefab;
void Start()
{
     copyPrefab = prefab;
     copyPrefab.transform.position = new Vector2(1, 0);
     myObjects.Add(copyPrefab);
     copyPrefab.transform.position = new Vector2(2, 0);
     myObjects.Add(copyPrefab);
     foreach(var item in myObjects)
     {
         Debug.Log(item.transform.position);
     }
}

У меня есть два игровых объекта в списке, но их позиция всегда одинакова. Почему? Я не хочу создавать экземпляры, я создаю позже. Я просто хочу сохранить игровые объекты. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Позиции всегда одинаковы, потому что вы одинаковы. Смотрите строки добавления

myObjects.Add(copyPrefab);
copyPrefab.transform.position = new Vector2(2, 0);
myObjects.Add(copyPrefab);

Это тот же объект, и поэтому не имеет значения, на какой индекс списка вы смотрите. Вы не можете быть в двух местах одновременно.

Я не знаю, что вы имеете в виду, не желая создавать экземпляры. Вы имеете в виду второй сборный дом? Если это так, вы не можете иметь оба эти различия. Вы должны сделать:

copyPrefab = GameObject.Instantiate(prefab, someTrans, someRot);
myObjects.Add(copyPrefab);
0 голосов
/ 12 марта 2020

GameObject - это класс ссылочный тип . Таким образом, вы, по сути, ссылаетесь на один и тот же объект, когда во второй раз устанавливаете позицию. Вам нужно изменить как это:

void Start()
{
     myObjects.Add(Spawner(prefab,new Vector2(1, 0)));
     myObjects.Add(Spawner(prefab,new Vector2(2, 0)));
     foreach(var item in myObjects)
     {
         Debug.Log(item.transform.position);
     }
}

GameObject Spawner(GameObject prefab, Vector3 pos){
return GameObject.Instantiate(prefab, pos, Quaternion.identity;);

}

Предупреждение: непроверенный код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...