在Unity中围绕X和Y轴旋转对象

时间:2015-08-27 16:58:51

标签: android unity3d rotation touch

我试图通过拖动屏幕在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); 

}

2 个答案:

答案 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); 
}

修改:我将xy混淆了,修复了。

答案 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);}