Unity 6.3
0 онлайн 57 гостей 3 в системе
Вход
Программирование в Unity Шаг 83 из 210

Как удаление кода влияет на контент

При сборке проигрывателя в Unity запускается процесс UnityLinker для уменьшения размера сборок путем удаления неиспользуемых типов. Этот процесс может удалить следующее:

  • Целые объекты C# Unity, такие как экземпляры MonoBehaviour и ScriptableObject. Unity может удалить их из основных сборок Unity, таких как UnityEngine.dll и Unity.dll, но сохраняет их в пользовательских сборках, как только эти сборки будут помечены как использованные.
  • Регулярные C# структуры и классы.
  • Части классов (например, методы, которые не используются).
  • Целые модули Unity, такие как AI или Physics, если не упоминается ни один тип из этого модуля.

Влияние удаления кода на содержимое отражается в проигрывателе в виде исключений нулевых ссылок, ошибок отсутствия типов или сбоев. Кроме того, сборки , AssetBundle, или Addressables, предназначенные только для содержимого, не могут использовать типы, удаленные из сборки проигрывателя.

Вы можете использовать Отчет о сборке Inspector’s Вкладка "Стриппинг" для проверки того, какие модули и типы были сохранены в сборке Player.

Можно предотвратить удаление кодов линкером в следующих случаях:

Предотвратить код стриптинг типов, используемых в AssetBundles

Unity может удалить тип объекта Unity, который присутствует в AssetBundles, но не в любой сцене или ассете, включенном в сборку проигрывателя. Это означает, что контент из AssetBundle может работать при тестировании в режиме воспроизведения или на сборках с минимальным удалением кода, но ошибки или сбои возникают в проигрывателе, созданном с включенным удалением кода.

Чтобы решить эту проблему, можно создать пользовательский скрипт сборки, который непосредственно включает файл манифеста AssetBundle, следующим образом:

  1. Создайте AssetBundle перед созданием проигрывателя. Выходная папка содержит один файл .manifest для каждого AssetBundle и корневой файл .manifest с тем же именем, что и папка выхода.
  2. Передайте путь к корневому файлу .manifest в процесс сборки Player с BuildPipeline.BuildPlayer API.

Дополнительные сведения см. в AssetBundle ссылка на формат файла и BuildPlayerOptions.assetBundleManifestPath.

Вы также можете использовать атрибут Preserveили вручную создать файл link.xml в вашем проекте, чтобы дополнительно повлиять на поведение удаления кода.

Предотвращение разрушения типов, используемых в Addressables

Если тип объекта Unity присутствует в контенте, созданном с помощью Addressables, но не в любой сцене или ассете, встроенном в проигрыватель, то Unity может удалить этот тип.

Addressables автоматически создает файл link.xml в папке Library/com.unity.addressables, описывающий типы, используемые в контенте. Сборка проигрывателя принимает во внимание этот файл link.xml, при условии, что контент Addressables был создан до или одновременно с сборкой проигрывателя.

Вы также можете использовать атрибут Preserveили вручную создать файл link.xml в вашем проекте, чтобы дополнительно повлиять на поведение удаления кода.

Предотвращение разрушения модуля

Вы не можете использовать файл link.xml для предотвращения удаления целых модулей Unity (например, AI или Physics).

Если вам нужно использовать типы из модуля в сборке Addressables, убедитесь, что сборка Player включает некоторое содержимое, которое ссылается на этот модуль. Например, чтобы сохранить модуль Physics, добавьте компонент, такой как Rigidbody или Collider к GameObject в сцене, включенной в вашу сборку. Это создает зависимость, которую процесс сборки Player распознает и сохраняет модуль.

Только скриптовые сборки

Сборки проигрывателя записывают используемые типы в файле ScriptsOnlyCache.yaml в папке Library/PlayerDataCache, который можно использовать для диагностики любых проблем с удалением кода. Этот файл используется для поддержки конвейера Инкрементальный поток сборки, который может повторно использовать содержимое предыдущей сборки проигрывателя. В этом случае сборка проигрывателя передает кэшированное использование типов из этого файла в линкер Unity.

Примечание: ScriptsOnlyCache.yaml файл использует внутренний формат, который может измениться в будущих версиях Unity. Для управления усечением кода используйте link.xml файлов в вашем проекте вместо изменения этого файла напрямую.

Дополнительные ресурсы