【发布时间】:2020-04-11 15:43:03
【问题描述】:
我正在编写一个脚本,它可以围绕玩家对象对角旋转相机(3D x 和 3D y 轴)。输入如下:
- 鼠标在 z 轴上绕对象旋转 y 轴
- 鼠标 x 轴进行对角线“过肩”旋转,从而修改相机旋转的 y 和 x:
demo of my current camera script
它可以工作,但是,我无法限制相机的 y 轴旋转。 X 轴按预期工作。观看上面的视频,看看最后的问题。它在 y 轴上过度旋转,因此相机以完全错误的方向朝向玩家。也许有大脑功能的人可以想出一个解决方案?太棒了,提前谢谢!
这是我的脚本:
void Update() {
mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
mouseY = -(Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime);
rotationXAxis += mouseY;
rotationXAxis = ClampAngle(rotationXAxis, -30f, 30f);
float rotationYAxis = rotationXAxis;
rotationYAxis = ClampAngle(rotationYAxis, 0f, 30f);
Quaternion fromRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 0);
Quaternion toRotation = Quaternion.Euler(rotationXAxis, transform.rotation.eulerAngles.y - rotationYAxis * Time.deltaTime, 0);
Quaternion rotation = toRotation;
Vector3 negDistance = new Vector3(xPosOffset, yPosOffset, -distance);
Vector3 position = rotation * negDistance + player.position;
transform.rotation = rotation;
transform.position = position;
player.Rotate(Vector3.up * mouseX);
mouseY = Mathf.Lerp(mouseY, 0, Time.deltaTime);
}
float ClampAngle(float angle, float min, float max) {
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp(angle, min, max);
}
【问题讨论】:
-
对我来说最大的问题是您没有或使用原始位置。因为您将能够计算一些旋转并添加到原始位置。
标签: c# unity3d 3d camera physics