Как получить base у варианта префаба в рантайме?

Использую Unity 2020.1.17f1 и C#.

Предположим у меня есть префаб "Предмет". У него есть разные варианты, например, один из них - "Бутылка", у которой, в свою очередь, есть вариант "Газировка".

И вот в коде на C# у меня есть экземпляр "Газировки" как GameObject. Можно ли как-нибудь узнать чьим вариантом является эта "Газировка"? Другими словами, хотелось бы получить в рантайме ее base, который виден в Unity.

Если это нельзя сделать напрямую(о чем я и подозреваю), то можно ли как-нибудь сделать это обходным путем, например, через реализацию каких-то компонент или не в рантайме?


Ответы (1 шт):

Автор решения: Lizurt

Для этого можно использовать PrefabUtility.GetCorrespondingObjectFromSource, однако данный метод работает только с редактором Unity.

Также расскажу о другом способе который использовался мной до нахождения метода, описанного выше. Если вдруг префабы в формате YAML (как в случае у автора вопроса), можно вручную сканировать .prefab файлы как текстовые, искать у них строку с m_SourcePrefab, вытаскивать из него значение guid, а позже, используя AssetDatabase.GUIDToAssetPath() и AssetDatabase.LoadAssetAtPath() получить сам объект по guid.

→ Ссылка