Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建一个空游戏对象,将现有游戏对象的数据存储在新游戏对象中,然后销毁现有游戏对象_C#_Unity3d_Clone_Gameobject - Fatal编程技术网

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

C# 创建一个空游戏对象,将现有游戏对象的数据存储在新游戏对象中,然后销毁现有游戏对象,c#,unity3d,clone,gameobject,C#,Unity3d,Clone,Gameobject,我想将一个游戏对象的现有数据存储在一个新的游戏对象中(在我需要之前不实例化它),然后删除现有的游戏对象,从而给我一个精确的克隆(在场景中没有实例化) 所以我将游戏对象的副本存储在一个列表中,因为我想要多个副本,我可以随时实例化它们。如果我不销毁(现有游戏对象),则会制作一个副本,但是当我销毁现有游戏对象时,假定复制的游戏对象将是列表中缺少的对象 `//#1 GameObject CloneObj; CloneObj = ExistingObj; CloneList.Add(CloneObj) D

我想将一个游戏对象的现有数据存储在一个新的游戏对象中(在我需要之前不实例化它),然后删除现有的游戏对象,从而给我一个精确的克隆(在场景中没有实例化)

所以我将游戏对象的副本存储在一个列表中,因为我想要多个副本,我可以随时实例化它们。如果我不销毁(现有游戏对象),则会制作一个副本,但是当我销毁现有游戏对象时,假定复制的游戏对象将是列表中缺少的对象

`//#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-在场景中创建一个克隆,该克隆仅包含我不想要的变换值


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

尝试3,跳过第2行:

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

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

查看解释概念引用变量的代码本。。=运算符将原始对象的地址复制到新对象,但不复制新对象的数据内容。有很多方法可以做到这一点,但老实说,我很少需要这样做。所以,也许你需要先问一个问题,为什么你想克隆这个对象?