【问题标题】:Creating An empty gameobject, storing the data of an existing gameobject in the new gameobject and then destroying the existing gameobject创建一个空的游戏对象,将现有游戏对象的数据存储在新游戏对象中,然后销毁现有游戏对象
【发布时间】:2019-11-25 08:23:03
【问题描述】:

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

所以我将游戏对象的副本存储在一个列表中,因为我想要多个可以随时实例化的对象。如果我不销毁(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 - 在场景中创建一个只有我不想要的变换值的克隆。

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

【问题讨论】:

    标签: c# unity3d clone gameobject


    【解决方案1】:

    尝试 3 并跳过第 2 行:

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

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

    【讨论】:

    • 查看解释概念引用变量的代码手册。= 运算符将原始对象的地址复制到新对象,它不会复制新对象的数据内容。有很多方法可以做到这一点,但老实说,我很少需要这样做。所以也许你需要从为什么要克隆对象的问题开始?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多