Unity 6.3
0 онлайн 62 гостей 3 в системе
Вход

PrefabUtility.GetCorrespondingObjectFromOriginalSource

Declaration

public static TObject GetCorrespondingObjectFromOriginalSource(TObject componentOrGameObject);

Параметры

Параметр Описание
componentOrGameObject Объект для поиска соответствующего первоначального объекта.

Возвращаемое значение

TObject Соответствующий объект из исходного источника или null.

Описание

Получает объект источника для заданного объекта.

Для любого объекта, переданного этому методу, Unity следует по цепочке соответствующих объектов до тех пор, пока их не останется больше, и возвращает последний найденный объект.

Вы можете использовать этот метод, чтобы найти соответствующие префаб ассет, от которого происходит вводимый объект.

Например, на следующей диаграмме, префаб ассет A содержит вложенный дочерний объект префаб B, который содержит вложенный дочерний объект префаб C.



На рисунке показаны вложенные префаб ассетов, при этом B и C вложены в A, а C вложен в B, и как эта структура переносится на их вложенные экземпляры в Hierarchy окно.

Из-за этой структуры, префаб С существует как в А, так и в В. B. Первоначально он был добавлен в B, но последний объект в цепи C.

В этом примере, если вы предоставляете экземпляр GameObject C как componentOrGameObject параметр к GetCorrespondingObjectFromOriginalSource, то метод возвращает ассет C.

Дополнительные сведения об исходных объектах см. в Введение в префабы.

В следующем примере в Редактор добавляется пункт меню, который запускает простой мастер, позволяющий проверить результаты этого метода.

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)); } }

Если вам нужно знать ассет, в который был первоначально добавлен данный GameObject или Компонент (а не последний объект в цепи), используйте GetOriginalSourceRootWhereGameObjectIsAdded.

См. также: GetCorrespondingObjectFromSource, GetCorrespondingObjectFromSourceAtPath, GetOriginalSourceRootWhereGameObjectIsAdded.