Quaternion qua = Quaternion.Euler(transform.rotation.eulerAngles);//获取相机当前旋转量 float mouseX = Input.GetAxisRaw("Mouse X") * rotateSpeed * Time.deltaTime; float mouseY = Input.GetAxisRaw("Mouse Y") * rotateSpeed * Time.deltaTime;//检测鼠标移动 float moveX = Input.GetAxisRaw("Horizontal") * moveSpeed * Time.deltaTime; float moveZ = Input.GetAxisRaw("Vertical") * moveSpeed * Time.deltaTime; //检测移动 //print(Time.deltaTime); transform.rotation = Quaternion.Euler(-mouseY + transform.rotation.eulerAngles.x, mouseX + transform.eulerAngles.y, 0);//控制方向 transform.position += qua * new Vector3(moveX, 0, moveZ); transform.position = new Vector3(Mathf.Clamp(transform.position.x, -95, 95),4, Mathf.Clamp(transform.position.z, -95, 95));这是我找的一个别人做好的游戏,我拿来学习观摩,但是这边的new不是很懂,调试的过程中是发现这个是为了稳定住物体不会跟着摄像机的镜头到处飞,但是具体为什么不知道,希望能为我解答。
倒数第二句的意思是将向量(由水平和垂直偏移控制(如键盘或手柄的方向键))按摄像机的旋转量(四元数)旋转最后在赋值回相机(从你贴的代码里看不出transform是不是相机,只能从你的注释里推测)。最后一句是用了 Clamp 钳位操作,因为你上一步旋转后的位置可能太偏,所以如果 x、z 轴向超过 [-95, 95] 的范围(也就是底盘的以原点为中心的一个正方形区域),则把它限制在这个区域的边界上,同时固定摄像机的高度(y 轴)到 4