Unity:无法修改`UnityEngine.Transform.position'的值类型返回值

hmt*_*inc 2 c# unity-game-engine

我目前正在尝试使用从JavaScript转换的代码将我的相机锁定到我在Unity3D中制作的地图:

transform.position.z = Mathf.Clamp(transform.position.z, zmin, zmax);
transform.position.x = Mathf.Clamp(transform.position.x, xmin, xmax);
Run Code Online (Sandbox Code Playgroud)

但Unity在编译时继续返回以下错误: error CS1612: Cannot modify a value type return value of 'UnityEngine.Transform.position'. Consider storing the value in a temporary variable.

afp*_*pro 10

因为Vector3是a struct,意思是'价值类型',而不是'参考类型'.因此,该物业Transform.position的吸气剂返回结果的"新" Vector3.如果你直接修改它,'NEW' Vector3被修改,'NOT' Transform.position属性.明白了吗?

Transform.position.x = 0; // this is wrong code
// is same with
Vector3 _tmp = Transform.position; // getter
_tmp.x = 0; // change 'NEW' Vector3
Run Code Online (Sandbox Code Playgroud)

这显然不是你想要的,所以编译器告诉你这是一个问题.

你应该声明一个新的Vector3,并使用Transform.position's getter来修改它,并Transform.position使用它的setter进行更改.

Vector3 _tmp = Transform.position; // getter
_tmp.x = 0; // change 'NEW' Vector3
Transform.position = _tmp; // change Transform.position with it's setter
Run Code Online (Sandbox Code Playgroud)

不用担心Vector3 _tmp,它只是值类型,不会创建内存碎片.