Проект, над которым я работаю, имеет некоторые специфические требования к дизайну, и я пытаюсь найти решение, которое их удовлетворяет (и понимая, что, скорее всего, «это невозможно»).
- 3D-модели будут храниться в одном или нескольких пакетах активов, на которые будут ссылаться, чтобы будущие обновления можно было с минимальными усилиями передавать в несколько приложений (40 программ не нужно перекомпилировать).
- Пакеты ресурсов считаются в определенной степени нестабильными (они могут изменяться извне, чтобы позволить обновлять 3D-ресурсы и текстуры, обновления никогда не должны требовать повторной компиляции исполняемого файла Unity).
- Никакой код не может быть включен в пакеты ресурсов (множество причин; прежде всего, Unity не может запускать код, отсутствующий в его dll, поэтому ресурсы сценариев должны присутствовать в базовом приложении; также существует проблема накладных расходов: эти модели очень точно детализированные, сотни деталей (буквально вплоть до отдельных винтов), каждая из которых может быть неразборной по отдельности).
Мне нужно найти способ, как в редакторе, так и во время выполнения, чтобы иметь возможность однозначно ссылаться на отдельные части 3D-ресурсов, чтобы разработчики приложений могли указать, какие биты должны иметь функциональность и какого рода, в то время как во время выполнения приложение должно иметь возможность чтобы найти эти биты, чтобы применить функциональность.
Рассмотренные варианты и их недостатки:
- Преобразование имен объектов иерархии. Сломается, если объект будет переименован, перемещен (переподчинен) или удален (возможно, если маловероятно, создает невидимые зависимости). Нарушает требование №2.
- Использование GUID. Требует, чтобы каждый объект в иерархии имел прикрепленный скрипт, хранящий информацию. Нарушает требование №3.
- Использование комплектов ассетов как включенных (скомпилированных в проект) ресурсов. Нарушает требование №1.
- Адресуемые пакеты ресурсов Unity. В настоящее время не готов к использованию в производстве и не будет готов к сроку сдачи этого проекта.