Version: 2023.2

PrefabUtility.GetCorrespondingObjectFromOriginalSource

切换到手册
public static TObject GetCorrespondingObjectFromOriginalSource (TObject componentOrGameObject);

参数

componentOrGameObject 从中查找相应原始对象的对象。

返回

TObject 来自原始源的对应对象或 null。

描述

Retrieves the object of origin for the given object.

For any object you pass to this method, Unity follows through the chain of corresponding objects until there are no more and returns the last one found.

You can use this method to find the corresponding prefab asset where the input object originated.

For example, in the diagram shown below, prefab asset "A" contains a child nested prefab "B", which contains a child nested prefab "C".



Due to this structure, prefab "C" exists in both "A" and "B". It was originally added in "B", but the last object in the chain is "C"

Therefore in this example scenario, when the GameObject "C (Instance)" is passed in as the source to this method, this method returns the asset "C".

The example script below adds a menu item to the editor, which launches a simple wizard that allows you to test the results of this method.

using UnityEditor;
using UnityEngine;
public class AssetSourceTestWizard : ScriptableWizard
{
    public GameObject instance;

[MenuItem("Test/Asset Source Test Wizard")] static void CreateWizard() { ScriptableWizard.DisplayWizard<AssetSourceTestWizard>("Asset Source Test Wizard", "Do Test"); }

void OnWizardCreate() { var o1 = PrefabUtility.GetCorrespondingObjectFromOriginalSource(instance); Debug.Log("Corresponding object from original source: " + o1.name + " from: " + AssetDatabase.GetAssetPath(o1)); } }

If you need to know the asset where a given GameObject or Component was originally added (not the last object in the chain), use GetOriginalSourceRootWhereGameObjectIsAdded.

See also: GetCorrespondingObjectFromSource, GetCorrespondingObjectFromSourceAtPath, GetOriginalSourceRootWhereGameObjectIsAdded.