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;