1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Tencent-InjectFix

Клонировать/Скачать
quick_start_en.md 6.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 02:20 f41209d

Быстрый старт

Доступ к примеру

Проверьте патч, чтобы загрузить его.

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);
        }
    }
}

Ключевые моменты:

  • Пометьте класс тегом Configure для настройки.
  • Добавьте тег IFix к атрибуту configure, который должен быть статическим классом.

Динамическая конфигурация, помимо того, что не нужно настраивать один за другим, может иметь другие дополнительные преимущества. Возьмём, к примеру, вышеописанный случай, последующее добавление или удаление класса в пространстве имен не потребует изменения конфигурации.

После настройки мобильный пакет автоматически проведёт предварительную обработку. Если вы хотите автоматизировать упаковку, вы также можете вручную вызвать функцию 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 в редакторе

В описанном выше процессе патч загружается на телефон, но если вы хотите быстро изучить возможности исправления iFix в редакторе, ознакомьтесь с этим документом: «Исследуйте исправление в редакторе»

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Tencent-InjectFix.git
git@api.gitlife.ru:oschina-mirror/Tencent-InjectFix.git
oschina-mirror
Tencent-InjectFix
Tencent-InjectFix
master