如何获得GameObject根预制件?

时间:2019-04-05 03:18:13

标签: c# unity3d

我有一个EditorWindow脚本。

内部OnGUI:

for (var i = selection.Count - 1; i >= 0; --i)
            {
                var selected = selection[i];

                if (UnityEditor.PrefabUtility.IsPartOfPrefabInstance(selected))
                {
                    var root = selected.GetComponentInParent(typeof(GameObject));
                    PrefabUtility.UnpackPrefabInstance(selected, PrefabUnpackMode.Completely, UnityEditor.InteractionMode.AutomatedAction);
                }
             }

我想找到选定的一部分的预制件。 但这给了我一个例外:

  

ArgumentException:GetComponent要求所请求的组件'GameObject'是从MonoBehaviour或Component派生的,或者是一个接口。

主要目标是销毁作为预制实例一部分的游戏对象。 为此,我需要先找到选定的游戏对象,然后将其从预制件中拆开,然后销毁。

但是我无法得到它的预制件。

1 个答案:

答案 0 :(得分:0)

可行的解决方案:

for (var i = selection.Count - 1; i >= 0; --i)
            {
                var selected = selection[i];

                if (UnityEditor.PrefabUtility.IsPartOfPrefabInstance(selected))
                {
                    var root = PrefabUtility.GetOutermostPrefabInstanceRoot(selected);
                    PrefabUtility.UnpackPrefabInstance(root, PrefabUnpackMode.Completely, UnityEditor.InteractionMode.AutomatedAction);
                }
            }