Использование обратных вызовов сборки
Можно реализовать обратные вызова построения, чтобы вставить настраиваемое поведение в процесс построения проигрывателя. Unity вызывает эти обратные вызова, независимо от того, запускаете ли вы сборку Player из Создание профилей окна, из пользовательского меню или из командная строка. Обратные вызовы сборки полезны при добавлении настраиваемого поведения сборки для пакета, используемого в различных Unity проектов.
Поддерживаемые обратные вызова
В следующей таблице перечислены обратные вызовы сборки, поддерживаемые Unity:
| Обратный вызов | Метод | Описание |
|---|---|---|
BuildPlayerProcessor |
PrepareForBuild |
Добавьте файлы и выполните пользовательскую настройку перед началом сборки. |
IPreprocessBuildWithContext |
OnPreprocessBuild |
Вызывается в начале сборки. |
IPostprocessBuildWithContext |
OnPostprocessBuild |
Вызывается в конце сборки. |
IFilterBuildAssemblies |
OnFilterAssemblies |
Удаление сборок из сборки. |
IPostBuildPlayerScriptDLLs |
OnPostBuildPlayerScriptDLLs |
Чтение или исправление управляемых сборок после компиляции. |
IProcessSceneWithReport |
OnProcessScene |
Вызывается, пока Unity обрабатывает каждую сцену для сборки. |
IPreprocessShaders |
OnProcessShader |
Фильтрация списка вариантов шейдера для сокращения времени сборки шейдера. |
IPreprocessComputeShaders |
OnProcessComputeShader |
Похож на IPreprocessShaders, но предназначен для вычисления шейдеров. |
IUnityLinkerProcessor |
GenerateAdditionalLinkXmlFile |
Настройка этапа удаления управляемого кода для сборки Player. |
IPostprocessLaunch |
OnPostprocessLaunch |
Вызывается, если Игрок запускается в качестве последнего шага сборки. |
Сборки Player поддерживают все эти обратные вызовы. Сборки только содержимого, не включающие управляемые сборки, вызывают лишь часть из них: IPreprocessBuildWithContext, IPostprocessBuildWithContext, IProcessSceneWithReport и IPreprocessComputeShaders.
Порядок обратного вызова
Вы можете использовать IOrderedCallback.callbackOrder чтобы управлять порядком выполнения обратного вызова сборки относительно других реализаций того же интерфейса. Unity сортирует обратные вызовы по возрастанию значения порядка, и вы можете назначить любое целое число — отрицательное или положительное. Например, если ваша реализация IPreprocessBuildWithContext имеет значение порядка 2, он работает после другого IPreprocessBuildWithContext обратный вызов, имеющий значение порядка 1.
Обратный вызов сборки во время постепенной сборки
На этапе сборки проигрывателя, связанном с содержанием, происходят следующие обратные вызова сборки:
- Scene обратные вызова:
IProcessSceneWithReport.OnProcessScene - Обратный вызов шейдера:
IPreprocessShaders.OnProcessShader,IPreprocessComputeShaders.OnProcessComputeShader
Когда Unity повторно использует содержимое из предыдущей сборки, он не запускает эти обратные вызова снова, так как они уже были запущены во время предыдущей сборки. Unity кэширует любое изменение содержимого, вызванное обратным вызовом в выводе предыдущей сборки.
Для обеспечения того, чтобы Unity запускает модифицированную реализацию обратного вызова, выполняет чистая сборка, или изменить содержимое одной из сцен или ассетов в построении.
Другие обратные вызова сборки, выполняемые до или после этапа содержимого, могут вновь запускаться во время постепенных сборок. Эти обратные вызова должны обрабатывать многократные запуска на одном и том же выходе сборки. Например, если обратный вызов добавляет записи в манифест приложения Android, он должен проверить, не существуют ли эти записи уже, чтобы избежать создания неверного файла манифеста.