Используется на этапе исправления, исправление собственного кода. Если вы обнаружите ошибку в функции, вы можете использовать метку для исправления функции, и функция с этой меткой может изменять функцию по своему усмотрению.
Эту метку можно использовать только для функций, просто отметьте эту метку непосредственно на функции, которую нужно изменить.
Эта функция изначально предназначалась для сложения двух значений, но теперь она работает неправильно, поэтому вы можете пометить функцию как [IFix.Patch]
и изменить её.
public int Add(int a,int b)
{
return a*b;
}
[IFix.Patch]
public int Add(int a,int b)
{
return a+b;
}
Используется на этапе исправления, добавление кода. На этапе исправления у людей всё ещё есть новые требования. Если вы хотите добавить функцию или класс, вы можете использовать метку [IFix.Interpret]
для реализации этого.
Эту метку можно использовать в свойствах, функциях и классах. Просто отметьте эту метку прямо на добавляемом коде.
Добавление нового свойства
private string name;//Поле name является собственным
public string Name
{
[IFix.Interpret]
set
{
name = value;
}
[IFix.Interpret]
get
{
return name;
}
}
Добавление новой функции
[IFix.Interpret]
public int Sub(int a,int b)
{
return a-b;
}
Добавление нового класса
[IFix.Interpret]
public class NewClass
{
...
}
Используется на этапе внедрения, адаптация класса виртуальной машины к собственному интерфейсу или адаптация функции виртуальной машины к собственной делегату.
Когда мне нужно его использовать?
Эту метку можно использовать только в классе. Где-то в программе людей напишите статический класс со статическим полем, значение которого представляет собой тип коллекции интерфейса и делегата.
Добавить новый класс, который реализует интерфейс.
public interface ISubSystem
{
bool running { get; }
void Print();
}
[IFix.Interpret]
public class SubSystem : ISubSystem
{
public bool running { get { return true; } }
public void Print()
{
UnityEngine.Debug.Log("SubSystem1.Print");
}
}
Добавить новую функцию (или корутину Unity с фиксированным кодом [IFix.Patch]
), используя yield return.
[IFix.Interpret]
public IEnumerator TestInterface()
{
yield return new WaitForSeconds(1);
UnityEngine.Debug.Log("wait one second");
}
Добавить новую функцию (или исправить код [IFix.Patch]
) и назначить её переменной делегата.
public class Test
{
public delegate int MyDelegate(int a, int b);
[IFix.Interpret]
public MyDelegate TestDelegate()
{
return (a,b) => a + b;
}
}
[IFix.CustomBridge]
public static class AdditionalBridge
{
static List<Type> bridge = new List<Type>()
{
typeof(ISubSystem),
typeof(IEnumerator),
typeof(Test.MyDelegate)
};
}
Используется на этапе внедрения, класс конфигурации, в котором хранятся некоторые вещи, которые необходимо внедрить или отфильтровать во время внедрения.
Метку можно использовать только в классах, класс должен находиться в папке Editor.
[Configure]
public class TestCfg
{
}
Используется на этапе внедрения, используется для хранения коллекции всех классов, которые, по вашему мнению, могут потребовать исправления в будущем. Эта метка связана с [IFix.Patch]
, потому что, если вы обнаружите, что функция нуждается в исправлении, просто пометьте метку [IFix.Patch]
, но предпосылка заключается в том, что класс функции, которая должна быть исправлена, должен находиться под [IFix]
.
Эту метку можно использовать только в свойствах, статическом свойстве в классе Configure, get. Это коллекция всех классов функций, которые, возможно, потребуется исправить.
Я думаю, что функции в классе Test могут быть неправильными, поэтому поместите их под метку [IFix]. Когда нужно будет исправить функцию Add в классе Test, просто пометьте её и модифицируйте.
[Configure]
public class TestCfg
{
[IFix]
static IEnumerable<Type> hotfix
{
get
{
return new List<Type>()
{
typeof(Test)
};
}
}
}
public class Test
{
[IFix.Patch]
public int Add(int a,int b)
{
return a+b;
}
}
Используется на этапе внедрения для хранения того, что вы хотите отфильтровать. На этапе внедрения все значения свойств под меткой [IFix] будут внедрены в код адаптации, но если вы не хотите внедрять функцию, вы можете использовать эту метку для фильтрации.
Метка [Filter] может использоваться только для функций — статической функции в классе Configure.
Я думаю, что функции в классе Test могут быть неправильными, так что поместите их под метку [IFix]. Когда нужно будет исправить функцию Add в классе Test, просто пометьте её и модифицируйте.
public class Test
{
[IFix.Patch]
public int Add(int a,int b)
{
return a+b;
}
public int Sub(int a,int b)
{
return a-b;
}
public int Div(int a,int b)
{
return a/b;
}
public int Mult(int a,int b)
{
return a*b;
}
}
[Configure]
public class TestCfg
{
[IFix]
static IEnumerable<Type> hotfix
{
get
{
return new List<Type>()
{
typeof(Test)
};
}
}
[Filter]
static bool Filter(System.Reflection.MethodInfo methodInfo)
{
return methodInfo.DeclaringType.FullName == "Test"
&& (methodInfo.Name == "Div" || methodInfo.Name == "Mult");
}
}
Метка | Этап использования | Использование | Применение |
---|---|---|---|
[IFix.Patch] | Исправление | Исправить функцию | Может быть размещена только на функциях |
[IFix.Interpret] | Исправление | Новые свойства, функции, типы | Может быть размещено на свойствах, функциях, типах |
[IFix.CustomBridge] | Внедрение | Мост интерфейса и делегата | Может быть размещен только в отдельном статическом классе. Класс хранилища виртуальной машины адаптируется к собственному интерфейсу, или функция виртуальной машины адаптируется к собственному делегату |
[Configure] | Внедрение | Конфигурационный класс | Может быть размещён только в классе, который написан отдельно и хранится в каталоге Editor |
[IFix] | Внедрение | Коллекция классов, которые могут потребовать исправления Функция | Можно разместить только в статическом свойстве класса [Configure] |
:-- | :--: | ||
[Filter] | inject | Функции, которые не должны быть внедрены | Можно разместить только в статической функции класса [Configure] |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )