Ниже приведен частичный ответ.Во-первых, некоторые полезные исследования, которые я обнаружил во время написания:
При определенных конфигурациях сборки, используя IL2CPP или Engine Stripping в WebGL, Unity будет агрессивно удалять компоненты, чтобы уменьшить размер сборки.
Одна потенциальная ошибка из-за чрезмерной агрессивности Unity может быть could not produce class with id xyz
.
Платформа WebGL документация сообщает:
Проблемы сразбор кода
Разбор кода может вызвать проблемы в вашем проекте, если он удаляет код, который действительно необходим.Это может быть в случае, когда вы загружаете AssetBundles во время выполнения, которые содержат классы, которые не включены в основную сборку и, следовательно, удалены из проекта.Сообщения об ошибках появляются в консоли JavaScript вашего браузера, когда это происходит (возможно, с последующим большим количеством ошибок).Например:
Could not produce class with ID XXX
.,.
Если вы подозреваете, что зачистка вызывает проблемы с вашей сборкой, вы также можете попробовать отключить опцию Strip Engine Code Code во время тестирования.
Из PlayerSettings.stripEngineCode
документации
Удалите из сборки неиспользуемый код двигателя (только для IL2CPP).
Если этовключен, неиспользуемые модули и классы кодовой базы Unity Engine будут удалены в сборках IL2CPP.Это приведет к меньшему размеру двоичного файла. Рекомендуется использовать этот параметр, однако вы можете отключить его, если подозреваете, что это вызывает проблемы в вашем проекте.Обратите внимание, что для серверной части сценариев IL2CPP всегда разрешено извлечение байтового кода из управляемых сборок.
В платформе WebGL документация есть это предложение для устранения проблемы вгенеральный.Даже если ваша проблема, по-видимому, не вызвана разборкой WebGL или IL2CPP, это может помочь вам:
Чтобы устранить эти ошибки, найдите идентификатор (например, XXX
в приведенном выше примере) в Ссылка на идентификатор класса , чтобы увидеть, для какого класса он пытается создать экземпляр.В таких случаях вы можете заставить Unity включать код для этого класса в сборку, либо добавив ссылку на этот класс в свои сценарии или в свои сцены, либо добавив файл link.xml вВаш проект.
Ниже приведен пример, который гарантирует, что класс Collider (и, следовательно, модуль Physics) сохраняется в проекте.Добавьте этот XML-код в файл с именем link.xml и поместите этот файл в папку «Ресурсы».
<linker>
<assembly fullname="UnityEngine">
<type fullname="UnityEngine.Collider" preserve="all"/>
</assembly>
</linker>