Проверьте патч, чтобы загрузить его.
var patchPath = "./Assets/IFix/Resources/Assembly-CSharp.ill.bytes";
if (File.Exists(patchPath))
{
PatchManager.Load(new FileStream(patchPath, FileMode.Open));
}
Реализация исправления зависит от статической вставки кода заранее, поэтому вам необходимо настроить, какие классы нужно предварительно обработать, чтобы их можно было исправить. В целом, все классы, которые не слишком требовательны к производительности, могут быть добавлены.
iFix поддерживает как динамические, так и статические списки, и динамические списки более удобны, потому что существует много разных классов. Ниже приведён пример, где настроены все классы, кроме анонимного класса в пространстве имён XLua.
[Configure]
public class InterpertConfig {
[IFix]
static IEnumerable<Type> ToProcess
{
get
{
return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
where type.Namespace == "XLua" && !type.Name.Contains("<")
select type);
}
}
}
Ключевые моменты:
Динамическая конфигурация, помимо того, что не нужно настраивать один за другим, может иметь другие дополнительные преимущества. Возьмём, к примеру, вышеописанный случай, последующее добавление или удаление класса в пространстве имен не потребует изменения конфигурации.
После настройки мобильный пакет автоматически проведёт предварительную обработку. Если вы хотите автоматизировать упаковку, вы также можете вручную вызвать функцию IFix.Editor.IFixEditor.InjectAllAssemblys.
Пометьте тегом Patch функцию, которую нужно исправить.
[Patch]
public int Add(int a, int b)
{
return a + b;
}
Выполните меню «InjectFix/Fix».
После успешного создания патча он будет помещён в каталог проекта с именем файла «{Dll Name}.patch.bytes» (например: «Assembly-CSharp.patch.bytes»). Загрузите патч на телефон и загрузите его, чтобы увидеть эффект.
Примечание: если есть условный макрос компиляции для функции, которая должна быть исправлена, такой как следующий код:
[Patch]
public void Job(int a)
{
#if UNITY_EDITOR
Foo();
#endif
#if !UNITY_EDITOR
Bar();
#endif
}
Если вы всё ещё генерируете патч непосредственно в редакторе, он вызовет ещё одну Foo и на одну меньше Bar, чем на телефоне, что может привести к различным проблемам, таким как неправильная логика или вызов специфичной для редактора функции, так что функция, которая должна вызываться, не может быть найдена и так далее.
Когда это происходит, вы можете скомпилировать Assembly-CSharp.dll в соответствии с параметрами компиляции платформы, а затем вызвать IFix.Editor.IFixEditor.GenPatch для генерации патча.
Компиляция Unity заключается в создании нового файла в каталоге Temp проекта, помещении параметров командной строки в файл и последующей компиляции путём выполнения команды, аналогичной (каталог основан на вашей собственной установке Unity) следующей:
"D:\Program Files\Unity201702\Editor\Data\MonoBleedingEdge\bin\mono.exe" "D:\Program Files\Unity201702\Editor\Data\MonoBleedingEdge\lib\mono\4.5\mcs.exe" @Temp/UnityTempFile-55a959adddae39f4aaa18507dd165989
Вы можете попробовать упаковать версию телефона в редакторе, а затем скопировать временный файл из каталога Temp в каталог проекта (он будет автоматически удалён после компиляции, поэтому вы должны действовать быстро).
Этот файл останется в основном неизменным, с единственным изменением — списком файлов C#, где его можно изменить, чтобы он генерировался динамически. Таким образом, список файлов C# генерируется на основе текущего проекта, а остальные части остаются неизменными. Затем используйте этот файл в качестве входных данных для компиляции.
В описанном выше процессе патч загружается на телефон, но если вы хотите быстро изучить возможности исправления iFix в редакторе, ознакомьтесь с этим документом: «Исследуйте исправление в редакторе»
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )