Unity沿X轴移动Player

时间:2018-07-24 01:04:55

标签: c# unity3d touch

我正在尝试根据手指位置在x轴上创建玩家移动。

我需要发生的事情:不是多点触控。我想要它,以便玩家可以将一根手指放下并抓住该位置。然后检查玩家是否在x轴上沿屏幕拖动了手指,并根据玩家从第一次触摸中拖动手指的位置向左或向右移动了玩家。

因此,如果他们触摸屏幕并向左拖动,则按速度向左移动,如果更改为向右拖动,则按速度向右移动。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:6)

最简单的方法是存储第一个触摸位置,然后将X与该位置进行比较:

public class PlayerMover : MonoBehaviour
{
    /// Movement speed units per second
    [SerializeField]
    private float speed;

    /// X coordinate of the initial press
    // The '?' makes the float nullable
    private float? pressX;



    /// Called once every frame
    private void Update()
    {
        // If pressed with one finger
        if(Input.GetMouseButtonDown(0))
            pressX = Input.touches[0].position.x;
        else if (Input.GetMouseButtonUp(0))
            pressX = null;


        if(pressX != null)
        {
            float currentX = Input.touches[0].position.x;

            // The finger of initial press is now left of the press position
            if(currentX < pressX)
                Move(-speed);

            // The finger of initial press is now right of the press position
            else if(currentX > pressX)
                Move(speed);

            // else is not required as if you manage (somehow)
            // move you finger back to initial X coordinate
            // you should just be staying still
        }
    }


    `
    /// Moves the player
    private void Move(float velocity)
    {
        transform.position += Vector3.right * velocity * Time.deltaTime;
    }

}

警告:此解决方案仅适用于具有触摸输入功能的设备(因为使用Input.touches)。

答案 1 :(得分:2)

使用此答案中提供的代码@programmer:Detect swipe gesture direction

您可以轻松检测到您要刷卡/拖动的方向。替换调试

 void OnSwipeLeft()
{
    Debug.Log("Swipe Left");
}

void OnSwipeRight()
{
    Debug.Log("Swipe Right");
}

具有移动角色的功能。如果使用RigidBody移动角色,则可以使用https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html。如果它是普通对象,则可以通过调整transform.position来移动它。

如果您需要有关如何移动刚体\法线对象的更多信息,请让我知道您拥有哪种类型的游戏,以及有关如何设置播放器的更多详细信息。