C# 扩展方法更改当前值

Pro*_*Pus 1 c# extension-methods reference unity-game-engine

有没有办法以这种方式更改扩展方法内的 Unity Vector3 结构值?

Vector3 myVector = new Vector(3.5f, 0.7f, 2f);
myVector.Floor(); // it should be (3f, 0f, 2f) instead it's (3.5f, 0.7f, 2f) still
Run Code Online (Sandbox Code Playgroud)

它只能以这种方式工作:

myVector = myVector.Floor(); // now it's (3f, 0f, 2f) 
Run Code Online (Sandbox Code Playgroud)

扩展代码:

public static void Floor(this Vector3 vector)
{
    vector.Set(Mathf.Floor(vector.x), Mathf.Floor(vector.y), Mathf.Floor(vector.z));
}
Run Code Online (Sandbox Code Playgroud)

或者

public static void Floor(this Vector3 vector)
{
    vector.x = Mathf.Floor(vector.x);
    vector.y = Mathf.Floor(vector.y);
    vector.z = Mathf.Floor(vector.z);
}
Run Code Online (Sandbox Code Playgroud)

gge*_*rge 6

你的扩展方法应该是这样的:

public static void Floor(ref this Vector3 vector)
{
    vector.x = Mathf.Floor(vector.x);
    vector.y = Mathf.Floor(vector.y);
    vector.z = Mathf.Floor(vector.z);
}
Run Code Online (Sandbox Code Playgroud)

因为struct是值类型

这是一个示例: https: //dotnetfiddle.net/NItg0O