我试图通过拖动屏幕在Android设备上旋转相机。 水平拖动 应将相机移至左或右,垂直 向上或向下即可。 Z轴应该被忽略,但如果我在屏幕上进行对角线拖动,它会围绕 Z轴旋转相机,所以有时我的相机会出现颠倒位置
以下是 Update()方法的代码:
if (touch.phase == TouchPhase.Moved)
{
float x = touch.deltaPosition.x * rotationSensitivity * Time.deltaTime;
float y = touch.deltaPosition.y * rotationSensitivity * Time.deltaTime;
_camera.transform.Rotate(new Vector3(1, 0, 0), y, Space.Self);
_camera.transform.Rotate(new Vector3(0, -1, 0), x, Space.Self);
}
答案 0 :(得分:1)
您使用了错误的transform.Rotate
重载
您正在使用的重载的第一个Vector3
参数是axis
可以旋转。
我相信你的意思是提供方向,而不是轴,如下:
if (touch.phase == TouchPhase.Moved)
{
Vector2 rotation = (Vector2)touch.deltaPosition * rotationSensitivity * Time.deltaTime;
_camera.transform.Rotate(Vector3.right * rotation.x, Space.Self);
_camera.transform.Rotate(-Vector3.up * rotation.y, Space.Self);
}
由于此代码未经我测试,我还建议尝试这个:
if (touch.phase == TouchPhase.Moved)
{
Vector2 rotation = (Vector2)touch.deltaPosition * rotationSensitivity * Time.deltaTime;
_camera.transform.Rotate(transform.right * rotation.x, Space.World);
_camera.transform.Rotate(-transform.up * rotation.y, Space.World);
}
修改:我将x
和y
混淆了,修复了。
答案 1 :(得分:1)
我找到了类似问题here的解决方案
void Update() {
float speed = lookSpeed * Time.deltaTime;
transform.Rotate(0f, Input.GetAxis("Horizontal") * speed, 0f, Space.World);
transform.Rotate(-Input.GetAxis("Vertical") * speed, 0f, 0f, Space.Self);}