【问题标题】:How to change prefab in Unity3D editor mode by coding如何通过编码在 Unity3D 编辑器模式下更改预制件
【发布时间】:2015-09-02 10:44:04
【问题描述】:

我正在写一个MenuItem 来对一系列预制件进行一些修改。我想做的是如下:

  1. 一个一个实例化预制件
  2. 将修改应用到实例
  3. 使用PrefabUtility.ReplacePrefab将实例保存到预制件

一段代码是这样的:

GameObject sequenceObject = Instantiate(Resources.Load("Cinematic/"+sequenceName)) as GameObject;
Object targetPrefab = PrefabUtility.GetPrefabParent(sequenceObject);

// do some change to the sequenceObject

PrefabUtility.ReplacePrefab(sequenceObject, targetPrefab, ReplacePrefabOptions.ConnectToPrefab);

问题是targetPrefab 是null

并且Hierarchy中代码生成的prefab的实例称为xxxxx(Clone),这与我将prefab拖入Hierarchy时不同,后者可以使用上述方法修改prefab。

所以有人可以帮忙吗?

Edit1:我的问题和这个问题一样:Instantiate Prefab but not linked to the prefab,但解决方案不是我想要的

【问题讨论】:

  • 您的 Prefab 是否位于 Resources 文件夹下?否则,您必须使用 AssetDatabase 类加载它。
  • @JeanLuc 是的,它在 Resources 文件夹下,并且在我点击我写的MenuItem 后,它的克隆实例已经出现在层次结构中
  • @JeanLuc 也许你可以检查我的编辑,我的问题和他一样
  • 哦,如果您想修改原始预制件,您不应该使用 Instantiate。
  • @JeanLuc 那我应该用什么?

标签: unity3d editor


【解决方案1】:

终于找到了解决办法:

GameObject sequenceObject = PrefabUtility.InstantiatePrefab(Resources.Load("Cinematic/" + sequenceName)) as GameObject;

这就是我想要的。

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多