【发布时间】:2021-05-17 13:20:03
【问题描述】:
例如我有 Prefab MyPrefab,它有两个孩子(child_1,child_2)。
AssetDatabase.OpenAsset(child_1); 在检查器中打开 MyPrefab 而不是 child_1。
【问题讨论】:
-
我也有兴趣在代码检查器中打开 child_1 的具体组件/字段
例如我有 Prefab MyPrefab,它有两个孩子(child_1,child_2)。
AssetDatabase.OpenAsset(child_1); 在检查器中打开 MyPrefab 而不是 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();
}
}
}
}
【讨论】: