繁体   English   中英

使用C#在Unity 3d中使用触摸旋转游戏对象

[英]Rotating gameobject using touch in Unity 3d with C#

我正在基于2指触摸旋转GameObject。 我的旋转工作正常,但是遇到一个奇怪的问题,有时我会用两根手指触摸以开始旋转,但是一旦触摸屏幕,对象就会立即旋转。 它何时执行似乎是随机的,并且轮换也似乎是随机的。 我以为触摸会触发基于最后一个位置的旋转,但是我的代码应该重置开始位置。

触摸代码位于附加到对象上的脚本中以进行旋转,因此全部都在一个文件中。

这是代码。

在Update方法中,我检测到它支持触摸,并尝试调用“ HandleTouch()”

void Update()
{
    if (Input.touchSupported)
        HandleTouch();
    else
        HandleMouse();
}

HandleTouch方法

private void HandleTouch()
{
    if (Input.touchCount < 2) return;
    switch (Input.touchCount)
    {
        case 2:
            Touch touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began)
            {
                lastRotPosition = touch.position;
            }
            else if (touch.phase == TouchPhase.Moved)
            {
                Vector3 offset = touch.position - lastRotPosition;
                lastRotPosition = touch.position;
                RotateCamera(offset.x * RotateSpeedTouch, offset.y * RotateSpeedTouch);
            }
            else if (touch.phase == TouchPhase.Ended)
            {
                lastRotPosition = new Vector2();
            }
            break;
    }
}

这是旋转GameObject的方法

void RotateCamera(float x, float y)
{
    float rotX = x * rotateSpeed * Mathf.Deg2Rad;
    float rotY = y * rotateSpeed * Mathf.Deg2Rad;
    transform.Rotate(Vector3.up, rotX);
    transform.Rotate(Vector3.right, -rotY);
}

感谢您提供的任何帮助或见解。

您没有跟踪fingerId

由于触摸可能不会以相同的顺序存储:

此外,设备可以检测到帧更新之间的触摸连续性,因此可以跨帧报告一致的ID号 ,并将其用于确定特定手指的移动方式。

... fingerId属性可用于识别帧之间的相同触摸。

因此,当新手指触摸屏幕时,您的代码可能会看到以下内容:

  • 第一次手指触摸,触摸计数1,跳过代码
  • 第二根手指触摸,它是数组中的第二根手指,触摸计数2,开始处理:
    • 第一次触摸的相位为TouchPhase.Moved
    • lastRotPosition当前为零(由于默认值或由于先前的TouchPhase.Ended
    • touch.position - lastRotPosition计算结果为非零(发生大旋转)

当它正常工作时,您得到以下信息:

  • 第一次手指触摸,触摸计数1,跳过代码
  • 第二个手指触摸,它是数组中的第一个手指,触摸计数2,开始处理:
    • 第一次触摸的相位为TouchPhase.Begin
    • lastRotPosition已更新为触摸的位置
    • 下一帧touch.position - lastRotPosition评估为接近零(发生小的旋转)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM