Войти
UnityФорумПрограммирование

link.xml не работает

#0
(Правка: 1:37) 1:01, 14 апр 2022

Привет всем!
Пытаюсь запустить проект на 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.
Кто-нибудь видит в чем тут ошибка?

#1
(Правка: 10:03) 9:49, 14 апр 2022

А эти классы точно в Assembly отдельных лежат?
Ты, насколько я понимаю, даешь инструкцию сохранить Assembly Distortion и DistortionRenderer. Если таких assembly нет в проекте, то по идее этот аргумент просто проигнорирован будет.

Учитывая, что у тебя оба класса в одном файле, думаю что они точно как минимум в одной assembly, а то и в глобальном Assembly.

Попробуй

<type fullname="DistortionRenderer" preserve="all" />
<type fullname="Distortion" preserve="all" />

Только учти что имя типа должно полным быть, со всеми namespace(хотя у тебя вроде таковых нет)

#2
10:09, 14 апр 2022

Increaser
Спасибо за ответ.
Кое-как нашёл ошибку.
Классы находились в assembly "Assembly-CSharp".
Указал эту сборку и все заработало.
Может вы знаете, имя сборки на всех ОС одинаковое?
То есть на Линукс и маке этот Xml тоже должен работать?

#3
11:50, 14 апр 2022

Alerr
> Классы находились в assembly "Assembly-CSharp".
По идее это имя сборки для проекта по умолчанию в Unity, так что я не вижу причин чтобы это не работало на Mac и Linux.

UnityФорумПрограммирование