【发布时间】:2016-12-14 06:23:27
【问题描述】:
我在场景中有一个包含子对象和组件的游戏对象。我想将其保存为预制件,然后使用 c# 脚本删除游戏对象。我有一个处理这种情况的基本脚本:
GameObject gObject = Gameobject.Find(name);
if (gObject != null)
{
PrefabUtility.CreatePrefab("Assets/Models/" + data + ".prefab", gObject, ReplacePrefabOptions.Default);
Destroy(gObject);
}
此代码运行良好。但仅在创建预制件时保存变换组件。游戏对象的网格信息在 CreatePrefab 操作后丢失。有没有办法创建一个包含游戏对象所有组件的预制件?
【问题讨论】:
-
您可能会在gamedev.stackexchange.com找到更多答案
-
我相信你需要使用instantiate来复制完整的prefab -> docs.unity3d.com/ScriptReference/Object.Instantiate.html
-
您使用的是什么版本的统一。在测试了您的确切代码之后,预制件拥有所有组件,就像它们所假设的那样。您是在编辑器中运行此代码还是在构建中运行此代码。 PrefabUtility 仅供编辑器使用。
-
我使用的是 5.3.5f1 版本。目前这段代码正在编辑器中运行,但我计划在 build 中运行此功能。但正如你所说,在构建中使用 PrefabUtility 是不可能的。你知道另一种从游戏对象创建预制件的方法吗?
-
你不能(afaik)在运行时创建预制件。它们只是一个编辑器内的构造。
标签: c# unity3d destroy gameobject