Vector Unity3D-基于移动的触摸的二维对象旋转(触摸之间的差异)

Vector Unity3D-基于移动的触摸的二维对象旋转(触摸之间的差异),vector,rotation,unity3d,Vector,Rotation,Unity3d,我是Unity的新手。我想根据移动的用户触摸(屏幕上移动的手指)旋转我的2D对象。我有以下代码: void Update () { if (Input.touches.Length > 0) { t = Input.GetTouch (0); if (t.phase == TouchPhase.Moved) { Vector3 movePos = new Vector3 (t.position.x, t.position.

我是Unity的新手。我想根据移动的用户触摸(屏幕上移动的手指)旋转我的2D对象。我有以下代码:

void Update ()
{
    if (Input.touches.Length > 0) {
         t = Input.GetTouch (0);

        if (t.phase == TouchPhase.Moved) {
            Vector3 movePos = new Vector3 (t.position.x, t.position.y, 0);
            var objectPos = Camera.main.WorldToScreenPoint (transform.position);
            var dir = movePos - objectPos; 
            transform.rotation = Quaternion.Euler (new Vector3 (0f, 0f, Mathf.Atan2 (dir.y, dir.x) * Mathf.Rad2Deg));
        }
    }
}
此代码基于用户触摸旋转对象,但当我再次在另一个位置触摸屏幕并进行触摸移动时,它会将整个对象旋转到实际触摸,然后根据触摸移动进行正确的对象旋转


我不想基于触摸位置旋转整个对象,但只基于触摸移动旋转对象。你明白我的意思吗?你能帮助我吗?如何重写代码?

如果我理解您的意思,请尝试使用以下代码:

private float turnSpeed = 5f;
private Vector2 movement;

void Update()
{
    Vector2 currentPosition = transform.position;

    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);

        if (touch.phase == TouchPhase.Moved)
        {
            Vector2 moveTowards = Camera.main.ScreenToWorldPoint(touch.position);

            movement = moveTowards - currentPosition;
            movement.Normalize();
        }
    }

    float targetAngle = Mathf.Atan2(movement.y, movement.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, 0, targetAngle), turnSpeed * Time.deltaTime);
}
让我知道这是否是你想要的。此外,这里还有一个完整的示例:

查看使用而不是触摸屏上的位置。这会让你走上正确的方向

var movedVector = t.deltaPosition;
编辑:

下面是与现有代码的可能集成。我没有统一在这台电脑上,所以这是完全未经测试。主要的想法是在帧之间改变手指的位置。然后,通过移动速度以及帧渲染之间的时间变化(增量时间)来缩放该变化

对象如何相对于该信息旋转取决于您。我刚刚将逻辑插入到您现有的代码中

float moveSpeed = 2.0f;

void Update ()
{
    if (Input.touches.Length > 0) {
         t = Input.GetTouch (0);

        if (t.phase == TouchPhase.Moved) {
            var delta = t.deltaPosition * moveSpeed * Time.deltaTime;
            transform.rotation = Quaternion.Euler (new Vector3 (0f, 0f, Mathf.Atan2 (delta .y, delta.x) * Mathf.Rad2Deg));
        }
    }
}

这不是我想要的。当我触摸屏幕时,它会将对象旋转到触摸屏上,但我不知道是什么将对象旋转到触摸屏上。我只想旋转对象,因为在触摸移动之间是不同的(可能是触摸之间的增量?)。你明白吗?你能告诉我应该如何使用它吗?我该怎么办?太多了!