创建一个空的游戏对象,将现有游戏对象的数据存储在新游戏对象中,然后销毁现有游戏对象

时间:2019-07-16 14:46:02

标签: c# unity3d clone gameobject

我想将一个游戏对象的现有数据存储在一个新的游戏对象中(直到我也想要实例化),然后删除现有的游戏对象,从而得到一个精确的克隆(在场景中未实例化)

因此,我将游戏对象的副本存储在列表中,因为我希望可以随时实例化多个对象。如果我不销毁(ExisitngGameObject),将创建一个副本,但是当我销毁现有游戏对象时,假定复制的游戏对象将在列表中丢失。

`//#1
GameObject CloneObj;
CloneObj = ExistingObj;
CloneList.Add(CloneObj)
Destory(ExisitingObj);`

//2 
GameObject CloneObj = new gameobject();
CloneObj = ExistingObj;
CloneList.Add(CloneObj)
Destory(ExisitingObj);`

//#3
CloneObj = Instantiate(ExisitingObj);
CloneObj = ExistingObj;
CloneList.Add(CloneObj)
Destory(ExisitingObj);`

//#4
GameObject CloneObj= new GameObject();
CloneObj.name = ExisitingObj.name;
CloneObj.transform.position =ExisitingObj.transform.position;
CloneObj.transform.rotation = ExisitingObj.transform.rotation;
CloneObj.transform.localScale = ExisitingObj.transform.localScale;
CloneObj = ExistingObj;
CloneList.Add(CloneObj)
Destory(ExisitingObj);
`

结果:

1-销毁现有对象时列表中缺少对象

2-在场景中创建一个空的游戏对象

3-在不需要的场景中创建一个不活动的游戏对象克隆

4-在场景中创建一个克隆,其中只有我不想要的变换值。

我只想存储现有游戏对象的副本k,然后销毁它,并在将来从列表中实例化存储的副本,例如按按钮或发生什么事情。

1 个答案:

答案 0 :(得分:1)

尝试3并跳过第2行:

CloneObj = Instantiate(ExisitingObj);
//CloneObj = ExistingObj; //remove this line
CloneList.Add(CloneObj)
Destory(ExisitingObj);

首先创建实例,然后将对新实例的引用替换为对原始对象的引用,然后将其添加到列表中并销毁它。如果我理解正确,那么您希望保留对新对象的引用,但销毁旧对象,因此不要丢失对新对象的引用