You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中是否应为PlayerMovement代码添加Time.deltaTime?如何正确实现?

关于PlayerMovement中Time.deltaTime的正确用法

你现在的问题核心是错误地在直接设置Rigidbody2D.velocity时乘以了Time.deltaTime。Velocity本身代表的是「每秒移动的距离」,而你把它乘以每帧的时间(Time.deltaTime通常在0.016左右,对应60帧),相当于把速度缩小到了原来的1/60,角色自然移动极慢。

什么时候该用Time.deltaTime?

只有当你逐帧累加位移的时候才需要用它,比如用Transform.Translate()这类每帧调用的移动方法——因为不同设备帧率不同,乘以Time.deltaTime能保证不管帧率高低,每秒移动的距离一致。但Rigidbody的velocity是直接设置「每秒速度」,不需要额外乘Time.deltaTime。

修正后的代码

using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerMovement : MonoBehaviour
{
    [SerializeField] private float horSpeed;
    [SerializeField] private float vertSpeed;
    private Rigidbody2D rb;
    private bool isJumping;

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

    private void Update()
    {
        var v = rb.velocity;

        // 跳跃:直接设置垂直速度,无需乘Time.deltaTime
        if (Input.GetKey(KeyCode.Space) && !isJumping)
        {
            v.y = vertSpeed;
            isJumping = true;
        }

        // 左右移动:用else if避免按键冲突,松开时重置水平速度
        if (Input.GetKey(KeyCode.A))
            v.x = -horSpeed;
        else if (Input.GetKey(KeyCode.D))
            v.x = horSpeed;
        else
            v.x = 0;

        // 向下移动:直接设置垂直速度
        if (Input.GetKey(KeyCode.S))
            v.y = -vertSpeed;

        rb.velocity = v;

        if(Input.GetKey(KeyCode.Escape))
            SceneManager.LoadScene(0);
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 建议这里加地面标签判断,避免碰撞到其他物体也触发跳跃重置
        // if (collision.gameObject.CompareTag("Ground"))
        isJumping = false;
    }
}

额外优化建议

  • 左右移动用else if可以避免同时按A和D时的逻辑冲突,松开按键时把x速度设为0,能让角色停止移动更及时(如果你想要滑动效果,可以保留原来的写法,或者用摩擦力来实现)。
  • 跳跃的地面检测可以优化:给地面物体添加Ground标签,然后在OnCollisionEnter2D里判断标签,这样只有碰到地面才允许再次跳跃,避免碰到敌人或其他物体就触发跳跃重置。

内容的提问来源于stack exchange,提问作者Dom Sendall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:45:37