【问题标题】:How to open a child of GameObject in inspector from code (Unity)如何在代码检查器中打开 GameObject 的子项(Unity)
【发布时间】:2021-05-17 13:20:03
【问题描述】:

例如我有 Prefab MyPrefab,它有两个孩子(child_1,child_2)。

AssetDatabase.OpenAsset(child_1); 在检查器中打开 MyPrefab 而不是 child_1。

【问题讨论】:

  • 我也有兴趣在代码检查器中打开 child_1 的具体组件/​​字段

标签: c# unity3d


【解决方案1】:

我假设您有一个预制件,并且在该预制件内您有另一个您希望使用 C# 打开的预制件。

您可以在要打开的子预制件上使用PrefabUtility.GetCorrespondingObjectFromSource 方法,然后对返回的结果调用AssetDatabase.OpenAsset 方法。

示例

using UnityEditor;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    [SerializeField]
    private GameObject prefab = null;

    [SerializeField]
    private string childPrefabName = string.Empty;

    private void Run()
    {
        var child = prefab.transform.Find(childPrefabName);
        var childPrefab = PrefabUtility.GetCorrespondingObjectFromSource(child);

        AssetDatabase.OpenAsset(childPrefab);

    }

    [CustomEditor(typeof(TestScript))]
    public class TestScriptEditor: Editor
    {
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            if (GUILayout.Button("Run"))
            {
                var script = target as TestScript;
                script.Run();
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2015-03-05
    • 2020-02-17
    • 1970-01-01
    相关资源
    最近更新 更多