我的触控算法正确吗?

时间:2018-07-03 08:11:14

标签: c# unity3d

Helllo,偷看! 我正在制作移动视频游戏,但我的触摸移动系统遇到了麻烦。这是我希望它工作的方式:

https://www.youtube.com/watch?v=X5tC7y1_ARA

1)仅在X轴上移动(这里不是问题)

2)当我在屏幕上按时,该物体不应在手指的位置传送。

3)Oject应该实时地从对象的初始位置移动到对象的当前位置,而不能传送。 我这样计算对象的当前位置:

对象的当前位置=对象的当前位置+手指的当前位置-手指的初始位置

这就是我到目前为止所得到的

        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began)
            {
                Vector3 startPos = touch.position;  //Initial Position
            }
            if (touch.phase == TouchPhase.Moved)
            {
                Vector3 movementDistance = new Vector3(touch.position.x - startPos.x, 0, 0);
                Vector3 direction = Camera.main.ScreenToWorldPoint(movementDistance);
                Vector3 currentPos = Camera.main.ScreenToWorldPoint(transform.position);
                transform.position = new Vector3(Mathf.Clamp(currentPos.x + direction.x, -121, 121), transform.position.y, transform.position.z);
            }
        }

由于某种原因,这无法正常工作。该对象会传送到随机位置,并且不会像我希望的那样移动对象。

您能帮我发现我的问题吗?如果没有,您知道其他方法吗?

1 个答案:

答案 0 :(得分:1)

了解“变量范围”-https://msdn.microsoft.com/en-us/library/ms973875.aspx

尝试一下:

Vector3 startPos;
float movementSpeed = 0.1f; // adjust this to your liking

void Update()
{
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        if (touch.phase == TouchPhase.Began)
        {
            startPos = touch.position;  //Initial Position
        }
        if (touch.phase == TouchPhase.Moved)
        {
            Vector3 movementDistance = new Vector3(touch.position.x - startPos.x, 0, 0);
            Vector3 direction = Camera.main.ScreenToWorldPoint(movementDistance);
            transform.position = new Vector3(Mathf.Clamp(transform.position.x + movementSpeed * direction.x, -121, 121), transform.position.y, transform.position.z);
        }
    }
}