Получение типа вектора и операторные методы с использованием отражения:
public static void CalculateNoisePosition<T>(ref T position, float offset, float scale)
{
Type vector = position.GetType();
MethodInfo add = vector.GetMethod("op_Addition", new[] {typeof(T), typeof(T)});
MethodInfo multiply = vector.GetMethod("op_Multiply", new[] {typeof(T), typeof(float)});
T one = (T) vector.GetProperty("one").GetValue(null);
position = (T) add.Invoke(null, new object[] {position, multiply.Invoke(null, new object[] {one, offset + 0.1f})});
position = (T) multiply.Invoke(null, new object[] {position, scale});
}
Обратите внимание, что если вы вызовете этот метод с T, являющимся чем-то другим, кроме Vector2
или Vector3
, вы будете Скорее всего, получите NullReferenceException
.
Как всегда, когда есть отражение, пожалуйста, профилируйте код и решите, стоит ли использовать этот подход, а не пишите 2 почти идентичных метода.