【发布时间】:2017-04-20 09:16:05
【问题描述】:
我正在创建一个自定义相机来查看 3D 对象。相机通常是一个飞行凸轮,但在拖动物体时,我希望相机绕着物体旋转。我已经实现了这一点,但是在模式之间切换时相机会在位置之间跳转。我将如何平滑这一点,以便相机在轨道后保持相同的位置,并且用户可以从该位置继续飞行凸轮模式。这是我的代码:
if (!rotateToggle)
{
if (Input.GetMouseButton(0)){
rotationX += Input.GetAxis("Mouse X") * cameraSensitivity * Time.deltaTime;
rotationY += Input.GetAxis("Mouse Y") * cameraSensitivity * Time.deltaTime;
}
rotationY = Mathf.Clamp(rotationY, -90, 90);
transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
transform.localRotation *= Quaternion.AngleAxis(rotationY, Vector3.left);
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
{
cameraSpeed = 150f;
}
else
{
cameraSpeed = 50f;
}
transform.position += transform.forward * cameraSpeed * Input.GetAxis("Vertical") * Time.deltaTime;
transform.position += transform.right * cameraSpeed * Input.GetAxis("Horizontal") * Time.deltaTime;
}else{
rotationX = Input.GetAxis("Mouse X") * RotateAmount;
rotationY = Input.GetAxis("Mouse Y") * RotateAmount;
Vector3 angles = transform.eulerAngles;
angles.z = 0;
transform.eulerAngles = angles;
transform.RotateAround(rotationTarget.position, Vector3.up, rotationX);
transform.RotateAround(rotationTarget.position, Vector3.left, -rotationY);
transform.LookAt(rotationTarget);
}
rotateToggle 在用户拖动对象时为真,rotationTarget 是轨道目标的变换。
谢谢!
编辑:进一步调查,这纯粹是旋转角度,而不是前面所说的实际位置!再次感谢
Edit2:为了进一步澄清,我希望能够保持以下之间的轮换值:
transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
transform.localRotation *= Quaternion.AngleAxis(rotationY, Vector3.left);
还有:
transform.eulerAngles = angles;
transform.RotateAround(rotationTarget.position, Vector3.up, rotationX);
transform.RotateAround(rotationTarget.position, Vector3.left, -rotationY);
transform.LookAt(rotationTarget);
切换相机模式时
【问题讨论】:
标签: c# unity3d camera transform