如何检查滑动是否在我的播放器的向前方向

问题描述 投票:0回答:1

问题是我正在根据滑动方向移动我的播放器,但我想在我的播放器向前滑动时移动我的播放器。简单来说

if (swipeDirection == myPlayersForwardDirection)
{
    //then move forward
}
else
{
   //don't move
}

我尝试了很多东西,但不知道如何比较滑动方向和玩家前进方向。

这是我的滑动代码。

//inside class
Vector2 firstPressPos;
Vector2 secondPressPos;
Vector2 currentSwipe;
 
public void Swipe()
{
     if(Input.GetMouseButtonDown(0))
     {
         //save began touch 2d point
        firstPressPos = new Vector2(Input.mousePosition.x,Input.mousePosition.y);
     }
     if(Input.GetMouseButtonUp(0))
     {
            //save ended touch 2d point
        secondPressPos = new Vector2(Input.mousePosition.x,Input.mousePosition.y);
       
            //create vector from the two points
        currentSwipe = new Vector2(secondPressPos.x - firstPressPos.x, secondPressPos.y - firstPressPos.y);
           
        //normalize the 2d vector
        currentSwipe.Normalize();
 
        //swipe upwards
        if(currentSwipe.y > 0  currentSwipe.x > -0.5f  currentSwipe.x < 0.5f)
        {
            Debug.Log("up swipe");
        }
        //swipe down
        if(currentSwipe.y < 0  currentSwipe.x > -0.5f  currentSwipe.x < 0.5f)
        {
            Debug.Log("down swipe");
        }
        //swipe left
        if(currentSwipe.x < 0  currentSwipe.y > -0.5f  currentSwipe.y < 0.5f)
        {
            Debug.Log("left swipe");
        }
        //swipe right
        if(currentSwipe.x > 0  currentSwipe.y > -0.5f  currentSwipe.y < 0.5f)
        {
            Debug.Log("right swipe");
        }
    }
}
c# unity3d
1个回答
0
投票

要比较两个Vector,最好的解决方案是使用

Vector3.Dot.
这个概念你在高中几何一定很熟悉。无论如何,这就是它的工作原理:

  • 如果两个向量完全在同一方向,则返回

    1

  • 如果两个向量垂直,则返回

    0
    .

  • 如果两个向量相反,则返回

    -1
    .

  • 其余数字按照对应程度排列

因此,您可以为相对匹配设定一个值,例如

0.9f

if (Vector3.Dot(swipeDirection,myPlayersForwardDirection) > .9f)
{
    //then move forward
}
else
{
    //don't move
}
© www.soinside.com 2019 - 2024. All rights reserved.