直接调用position.Set会发现没有用。其实和其本身是结构体有关,要当成一个值类型来看待,因为他全部是在栈中。
transform.position.Set(10,0,0);
改成这样即可:
var tmp = transform.position; tmp.Set(10, 0, 0); transform.position = tmp;
结构体在集合中的操作也是一样:
vec3Arr = new List<Vector3>(); vec3Arr.Add(new Vector3()); //位置不会改变. vec3Arr[0].Set(100, 0, 0); transform.position = vec3Arr[0]; //正确做法 var tmp = vec3Arr[0]; tmp.Set(100, 0, 0); vec3Arr[0] = tmp;
不过真的想吐槽Unity的Set居然不返回自身。。更好的方法是做成一个扩展
public static Vector3 Return(this Vector3 v, float newX, float newY, float newZ) { v.Set(newX, newY, newZ); return v; }
transform.position = transform.position.Return(10, 0, 0);