例如,我有一个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();
}
}
}
}