如何从代码(Unity)在检查器中打开GameObject的子级



例如,我有一个Premab MyPremab,它有两个子项(child_1,child_2(。

AssetDatabase.OpenAsset(child_1);在检查器中打开MyPremab,而不是child_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();
}
}
}
}

最新更新