首页 > 解决方案 > 将游戏对象添加到列表

问题描述

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);
     }
}

我在列表中有两个游戏对象,但它们的位置输出始终相同,为什么?我不想实例化,我稍后会实例化。我只想保存游戏对象。我怎样才能做到这一点?

标签: c#unity3d

解决方案


位置总是一样的,因为你是一样的。查看添加行

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

这是同一个对象,因此您查看列表的哪个索引并不重要。你不能同时在两个地方。

我不知道你不想实例化是什么意思。你的意思是第二个预制件?如果是这样,你不能让这两者都不同。你必须这样做:

copyPrefab = GameObject.Instantiate(prefab, someTrans, someRot);
myObjects.Add(copyPrefab);

推荐阅读