Unity 2d Movement脚本问题

ODOG

因此,我正在Unity中制作一个2d平台游戏(对c#和Unity还是同样的新手),并且我试图为一个简单的正方形制作运动脚本,该正方形将随机停止移动,跳起来重新开始运动,只为再次发生。

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed;
    public float jumpHeight;

    void Start()
    {
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            GetComponent<Rigidbody2D>().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x, jumpHeight);
        }

        if (Input.GetKey(KeyCode.D))
        {
            GetComponent<Rigidbody2D>().velocity = new Vector2(moveSpeed, 0);
        }

        if (Input.GetKey(KeyCode.A))
        {
            GetComponent<Rigidbody2D>().velocity = new Vector2(-moveSpeed, 0);
        }
    }
}
弗雷德里克·尼斯

如果您已向我们提供了正在使用的实际代码,则@Bejasc的注释中可能给出正确答案。在清洁度,最佳实践和某些功能方面,您并不需要以下提示来改进代码:

  1. 每次要读取值时,不要使用GetComponent <>()。创建GameObject时将其保存在变量中!(检查下面代码中的Start()方法)
  2. 如果玩家正在移动,则将Y速度设置为0,如果您要同时跳跃和移动,则无法使用,如果先跳跃(将Y速度设置为jumpHeight)然后移动(将Y速度设置为0),则此操作将无效。因为我们将每帧的Y速度设置为0,所以您的角色将漂浮在空中。将其设置为当前的Y速度!new Vector2在移动时检查y参数

结果代码:

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed;
    public float jumpHeight;
    Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpHeight);
        }

        if (Input.GetKey(KeyCode.D))
        {
            rb.velocity = new Vector2(moveSpeed, rb.velocity.y);
        }

        if (Input.GetKey(KeyCode.A))
        {
            rb.velocity = new Vector2(-moveSpeed, rb.velocity.y);
        }
    }
}

对于这个简单的运动脚本,您还可以通过执行以下操作来简化运动代码:

(前提是您在Unitys输入设置(编辑->项目设置->输入)中使用标准输入设置)

Input.GetAxis(“水平”)将是-1如果Aleft arrowleft on a gamepad joystick按下和1如果Dright arrow或者right on a gamepad joystick被按下。这是“水平”的默认设置,我想您可以猜到“垂直”的作用。

void Update() {
    float moveDir = Input.GetAxis("Horizontal") * moveSpeed;
    rb.velocity = new Vector2(moveDir, rb.velocity.y);

    // Your jump code:
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb.velocity = new Vector2(rb.velocity.x, jumpHeight);
    }
}

让我知道您是否有疑问或是否有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章