Кода я начинал работать с Юнити, первое что бросилось мне в глаза - префаб не может содержать в себе префаб. Долгими ночами я размышлял о том, почему же Юнити за все свое долгое существование не сумела решить эту проблему.
В сторе я встречался с некоторыми реализациями, но они не пришлись мне по душе. Почему? Тут все просто в одном из плагинов был очень печальный недостаток - в документаци красными буквами было написано "Не используйте стандартные кнопки Apply/Revert, иначе - колапс и печалька..." + "Обычный Instantiate не подходит нашим префабам. Более того, вам надо позаботиться о том чтобы указать Can Instantiate". Ну а второй, судя по видео, был обычным маленьким скриптом который просто создавал префаб внутри другого, когда появлялся на сцене, и все.
И тут я решил взять все в свои руки и попробовать реализовать чтото поинтереснее...
И так... Основными критериями к плагину были: 1. Префабы могут содержать другие префабы. 2. Префабы, которые содержит другие префабы, должны изменять свои копии при изменении их самих. 3. Префабы могут быть унаследованы от других префабов 4. Унаследованые или содержимые префабы могут изменять свойства и структуру относительно своих родителей(Добавление/Удаление компонентов/GameObjectов + изменение parent для объектов) 5. При изменении префаба сохранять ссылки на объекты как из внутренего префаба на наружный, так и наоборот. 6. И не забыть о префабах которые создаются при импорте моделей, дабы при реимпорте последних не терять уже настроеных свойств. 7. Возможность использовать стандыртные кнопки Apply/Revert и обычный Instantiate 8. Возможность визуально отслеживать какие префабы будут изменены при Apply'e, и от каких он сам наследуется
Вот решил поделится тем что получилось. Все перечисленное выше сейчас уже реализовано и находится на тестировании...