根据沿x轴的单一滑动移动游戏对象

时间:2017-07-17 16:24:16

标签: c# unity3d swipe

我试图沿着x轴和滑动方向移动物体,同时保持在屏幕内部。它应该像用户滑动一样移动距离(就像Ketchapp的冲刺英雄一样)。

这是我目前在更新中的代码:

if (Input.touchCount > 0)
        {
            if (Input.GetTouch (0).phase == TouchPhase.Began) // Get initial Position
            {
                playerPos = transform.position;
                //playerPos = Camera.main.ScreenToWorldPoint (playerPos);
                touchPos = Input.GetTouch (0).position;
                touchPos = Camera.main.ScreenToWorldPoint (touchPos);
                distance = 0f;

            } 
            else if (Input.GetTouch (0).phase == TouchPhase.Moved) 
            {
                Vector3 pos = Input.GetTouch (0).position;
                pos = Camera.main.ScreenToWorldPoint (pos);
                distance = pos.x - touchPos.x;
                transform.position = new Vector3 (transform.position.x + distance, transform.position.y, transform.position.z);

            }

        }

这不能正常工作,我是团结的新手。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这里的问题是TouchPhase.Moved不止一次发生(手势期间每一帧都会发生)。但是你的代码假定它只被调用一次。

这里有两个选择。

  • 选项1:重置起点

添加touchPos = Input.GetTouch (0).position;作为TouchPhase.Moved块的最后一行。这将有效地表明“这个距离已经处理完毕,下一帧将此举视为一个新动作,这是从哪里开始。”

  • 选项2:使用绝对偏移

TouchPhase.Moved块的最后一行更改为transform.position = new Vector3 (distance, transform.position.y, transform.position.z);。这将处理每一帧,就好像每个移动都被视为与原始起点的偏移并相应地设置X值。但是,这假设对象从0开始,并始终沿着X轴从0开始。

根据您的使用情况,您可能更喜欢一种方法而不是另一种方法。