Привет всем!
Пытаюсь запустить проект на IL2CPP, но вылетает куча тких ошибок:
MissingMethodException: Default constructor not found for type DistortionRenderer at System.RuntimeType.CreateInstanceMono (System.Boolean nonPublic, System.Boolean wrapExceptions) [0x00000] in <00000000000000000000000000000000>:0 at System.RuntimeType.CreateInstanceSlow ( System.Boolean publicOnly, System.Boolean wrapExceptions, System.Boolean skipCheckThis, System.Boolean fillCache) [0x00000] in <00000000000000000000000000000000>:0 at System.RuntimeType.CreateInstanceDefaultCtor ( System.Boolean publicOnly, System.Boolean skipCheckThis, System.Boolean fillCache, System.Boolean wrapExceptions, System.Threading.StackCrawlMark& stackMark) [0x00000] in <00000000000000000000000000000000>:0 at System.Activator.CreateInstance ( System.Type type, System.Boolean nonPublic, System.Boolean wrapExceptions) [0x00000] in <00000000000000000000000000000000>:0 at System.Activator.CreateInstance ( System.Type type, System.Boolean nonPublic) [0x00000] in <00000000000000000000000000000000>:0 at System.Activator.CreateInstance ( System.Type type) [0x00000] in <00000000000000000000000000000000>:0 at UnityEngine.Rendering.PostProcessing.PostProcessBundle.get_renderer ( ) [0x0002e] in F:\CG_G\Assets\Packages\com.unity.postprocessing\PostProcessing\Runtime\PostProcessBundle.cs:30 at UnityEngine.Rendering.PostProcessing.PostProcessLayer.RenderList ( System.Collections.Generic.List`1[T] list, UnityEngine.Rendering.PostProcessing.PostProcessRenderContext context, System.String marker) [0x0006f] in F:\CG_G\Assets\Packages\com.unity.postprocessing\PostProcessing\Runtime\PostProcessLayer.cs:1112 at UnityEngine.Rendering.PostProcessing.PostProcessLayer.RenderInjectionPoint ( UnityEngine.Rendering.PostProcessing.PostProcessEvent evt, UnityEngine.Rendering.PostProcessing.PostProcessRenderContext context, System.String marker, System.Int32 releaseTargetAfterUse) [0x0004b] in F:\CG_G\Assets\Packages\com.unity.postprocessing\PostProcessing\Runtime\PostProcessLayer.cs:1089 at UnityEngine.Rendering.PostProcessing.PostProcessLayer.Render ( UnityEngine.Rendering.PostProcessing.PostProcessRenderContext context) [0x00378] in F:\CG_G\Assets\Packages\com.unity.postprocessing\PostProcessing\Runtime\PostProcessLayer.cs:1045 at UnityEngine.Rendering.PostProcessing.PostProcessLayer.BuildCommandBuffers ( ) [0x0049a] in F:\CG_G\Assets\Packages\com.unity.postprocessing\PostProcessing\Runtime\PostProcessLayer.cs:668 at UnityEngine.Rendering.PostProcessing.PostProcessLayer.OnPreCull ( ) [0x0013d] in F:\CG_G\Assets\Packages\com.unity.postprocessing\PostProcessing\Runtime\PostProcessLayer.cs:462
Похоже, что класс портится при компиляции c IL2CPP. Здесь лучшая инструкция, которую нашел в сети по созданию link.xml.
Чтобы компилятор не трогал класс создал Assets\link.xml:
<linker> <asembly fullname="DistortionRenderer" preserve="all" /> <asembly fullname="Distortion" preserve="all" /> </linker>
Класс выглядит так и находится в CS-скрипте (не в dll):
Проект падает. Пробовал всякое прописывать в link.xml, но ничего не помогло, не пойму что ему нужно.
Кажется link.xml ни на что не влияет.
Прописал [Preserve] над классами, ошибки пропали. Все же очень хотелось бы понять в чем ошибка с xml.
Кто-нибудь видит в чем тут ошибка?
А эти классы точно в Assembly отдельных лежат?
Ты, насколько я понимаю, даешь инструкцию сохранить Assembly Distortion и DistortionRenderer. Если таких assembly нет в проекте, то по идее этот аргумент просто проигнорирован будет.
Учитывая, что у тебя оба класса в одном файле, думаю что они точно как минимум в одной assembly, а то и в глобальном Assembly.
Попробуй
<type fullname="DistortionRenderer" preserve="all" /> <type fullname="Distortion" preserve="all" />
Только учти что имя типа должно полным быть, со всеми namespace(хотя у тебя вроде таковых нет)
Increaser
Спасибо за ответ.
Кое-как нашёл ошибку.
Классы находились в assembly "Assembly-CSharp".
Указал эту сборку и все заработало.
Может вы знаете, имя сборки на всех ОС одинаковое?
То есть на Линукс и маке этот Xml тоже должен работать?
Alerr
> Классы находились в assembly "Assembly-CSharp".
По идее это имя сборки для проекта по умолчанию в Unity, так что я не вижу причин чтобы это не работало на Mac и Linux.