Как получить base у варианта префаба в рантайме?
Использую Unity 2020.1.17f1 и C#.
Предположим у меня есть префаб "Предмет". У него есть разные варианты, например, один из них - "Бутылка", у которой, в свою очередь, есть вариант "Газировка".
И вот в коде на C# у меня есть экземпляр "Газировки" как GameObject. Можно ли как-нибудь узнать чьим вариантом является эта "Газировка"? Другими словами, хотелось бы получить в рантайме ее base, который виден в Unity.
Если это нельзя сделать напрямую(о чем я и подозреваю), то можно ли как-нибудь сделать это обходным путем, например, через реализацию каких-то компонент или не в рантайме?
Ответы (1 шт):
Для этого можно использовать PrefabUtility.GetCorrespondingObjectFromSource, однако данный метод работает только с редактором Unity.
Также расскажу о другом способе который использовался мной до нахождения метода, описанного выше. Если вдруг префабы в формате YAML (как в случае у автора вопроса), можно вручную сканировать .prefab файлы как текстовые, искать у них строку с m_SourcePrefab, вытаскивать из него значение guid, а позже, используя AssetDatabase.GUIDToAssetPath() и AssetDatabase.LoadAssetAtPath() получить сам объект по guid.