在触摸 Unity C# 时移动播放器

本文关键字:移动 播放器 触摸 Unity | 更新日期: 2023-09-27 18:36:35

我创建了一个简单的脚本来移动键盘输入上的播放器,尽管现在我想在触摸输入上移动播放器,我该怎么做?

这是我的代码,那么如何编辑此代码以使其工作?我有跳跃工作,但不知道如何移动?

using UnityEngine;
using System.Collections;
public class MoveGround : MonoBehaviour
{
    public float y = 0f;
    public Rigidbody2D rb;
    //public float x = 0f;
    //public float z = 0f;
    // Use this for initialization
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }
    // Update is called once per frame
    void Update()
    {
        //move function
        if (Input.GetKey(KeyCode.W))
        {
            rb.velocity = new Vector2(0, y);
        }
        if (!Input.GetKey(KeyCode.W))
        {
            rb.velocity = new Vector2(0, 0);
        }
        if (Input.GetKey(KeyCode.S))
        {
            rb.velocity = new Vector2(0, -y);
        }
        //move function end
    }
    public void Move()
    {
    }
}

在触摸 Unity C# 时移动播放器

你想如何使用触摸输入而不是键盘输入来移动你的角色?当前代码根据按下的是"W"还是"S"键来移动字符。

您可以制作两个对应于"前进"和"后退"键的 UI 按钮。向这些按钮添加事件触发器组件。向按钮添加两种事件类型:"指针向下"和"指针向上"。将函数添加到每个事件的列表中。将此代码放到场景中的对象上。

bool movingForward;
bool movingBackward;
public float speed = 0f;// set this either here in code or in the editor
public Rigidbody2D rb;
void Start (){
    rb = GetComponent<Rigidbody2D>();   
    movingForward = false;
    movingBackward = false;
}

// Your forward button will call this function
public void moveForward (){
    movingForward = true;
    movingBackward = false;
}

// Your backwardbutton will call this function
public void moveBackward (){
    movingForward = false;
    movingBackward = true;
}
//

public void stopMoving(){
    movingForward = false;
    movingBackward = false;
}    
void Update () {
    if(movingForward || movingBackward ){// we're moving
            if(movingForward ){// forward
                rb.velocity = new Vector2(0, speed);

        }else if(movingBackward ){// backward
            rb.velocity = new Vector2(0, -speed);
        }
    }else{// we're moving neither forward nor backward
        rb.velocity = new Vector2(0, 0);// so stand still
    }
}

将每个函数指向该对象。在指针向下事件中,为要向前移动角色的按钮选择"向前移动"功能,为另一个按钮选择"向后移动"功能。在两者的指针向上事件中,只需选择"停止移动"功能。

这真的很简单,但它会起作用。

我同意@PolakięGames。最好的方法是创建两个附加EventTrigger的 UI 按钮,并将方法MoveForwardMoveBackwards分配给PointerDownStopMoving分配给PointerDown。尽管我会以不同的方式实现它:

using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class MoveExample : MonoBehaviour {
    public float Acceleration = 4f;
    public float Speed = 4f;
    private Vector2 _velocity = Vector2.zero;
    private Rigidbody _rigidbody;
    private void Start() {
        _rigidbody = GetComponent<Rigidbody>();
    }
    // movement methods
    public void Move(float velocity) { _velocity.x = velocity * Speed; }
    public void MoveForward() { Move(1f); }
    public void MoveBackwards() { Move(-1f); }
    public void StopMoving() { Move(0f); }
    private void Update() {
        _rigidbody.velocity = Vector2.Lerp(_rigidbody.velocity, _velocity, Time.deltaTime * Acceleration);
    }
}

这样,您的对象将移动,您可以控制速度和加速度。如果您打算将其与 2D 物理一起使用,则必须Rigidbody将其更改为 Rigidbody2D