C# 将游戏对象添加到列表中
我在列表中有两个游戏对象,但它们的位置输出总是相同的,为什么?我不想实例化,稍后将实例化。我只想保存游戏对象。我该怎么做呢?位置总是一样的,因为你知道它们是一样的。请参见添加行 myObjects.addCopyPrefact; CopyPrefact.transform.position=新向量22,0; myObjects.addCopyPrefact; 这是同一个对象,因此查看列表的哪个索引并不重要。你不可能同时在两个地方 我不知道你不想实例化是什么意思。你是说第二个预制房吗?如果是这样的话,你不能让这两个都不同。您必须执行以下操作: copyPrefab=GameObject.InstancePrefab、someTrans、someRot; myObjects.addCopyPrefact; GameObject是一个类,它是一个。因此,当你第二次设置位置时,基本上是指同一个对象。您需要这样的修改:C# 将游戏对象添加到列表中,c#,unity3d,C#,Unity3d,我在列表中有两个游戏对象,但它们的位置输出总是相同的,为什么?我不想实例化,稍后将实例化。我只想保存游戏对象。我该怎么做呢?位置总是一样的,因为你知道它们是一样的。请参见添加行 myObjects.addCopyPrefact; CopyPrefact.transform.position=新向量22,0; myObjects.addCopyPrefact; 这是同一个对象,因此查看列表的哪个索引并不重要。你不可能同时在两个地方 我不知道你不想实例化是什么意思。你是说第二个预制房吗?如果是这样的
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);
}
}
警告:未经测试的代码,因为您的copyprefab总是引用完全相同的游戏对象。。如果您使用InstanceEBIT不需要为InstanceEBIT创建方法包装器,那么您永远不会实际复制它;只是尝试为初学者创建最简单的解决方案:最简单的解决方案是简单地使用copypreafa=实例化prefa;CopyPrefact.transform.position=新向量21,0;myObject.AddCopyPrefable;。这不会使用额外的方法使其过于复杂,也不会重用OP的代码,因此更清楚需要更改的内容。然后。。事实上,这已经在中国完成了;
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;);
}