尝试更改玩家的方向时出错


public class PlayerMove : MonoBehaviour
{
private float mainCameraRotateY;
void Update()
{
mainCameraRotateY = Camera.main.transform.localEulerAngles.y;
if (Input.GetButton("Vertical") || Input.GetButton("Horizontal"))
{
Debug.Log(this.transform.eulerAngles.y);
Debug.Log(mainCameraRotateY);
this.transform.eulerAngles.y = mainCameraRotateY;
}
}
}

以上是一个附加在播放器上的脚本,使玩家在移动时转向相机所看到的方向。

但是this.transform.eulerAngles.y = mainCameraRotateY;报告了一个错误

错误CS1612:不能修改返回值的变换。eulerAngles因为它不是一个变量

其它部件均能正常工作。

我怎么能解决这个问题?

var eulerAngles = this.transform.eulerAngles;
eulerAngles.y = mainCameraRotateY;
this.transform.eulerAngles = eulerAngles;

你不能直接改变this.transform.eulerAngles,因为它在内部是作为属性实现的,而不是一个变量。因为内部Unity代码可能实现自定义setter函数,整个对象需要一次赋值,单个子变量或子属性不能更改。

Transform.eulerAngles属性它返回或接受一个完整的Vector3,即struct,因此是类型。

这意味着即使它编译,它也不会产生任何影响,因为您仅更改返回的y组件。向量,然后立即扔掉。

为了改变Transform.eulerAngles,你必须给它分配一个完整的Vector3

如果你想改变它的一个组件,你必须这样做,例如

var eulerAngles = transform.eulerAngles;
eulerAngles.y = mainCameraRotateY;
transform.eulerAngles = eulerAngles;

最新更新