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

如何让玩家对象沿自身面向方向移动?

解决2D物体沿自身面向方向移动的问题

你的代码核心问题是移动方向固定为世界空间的Y轴,和物体的旋转状态无关,所以不管怎么转,物体只会沿世界上下方向移动。要实现沿自身面向方向移动,需要基于物体的局部方向计算世界空间的移动向量。

修改后的代码

private float vertical;
private float spinning;
private float spinningValue;
[SerializeField] private float spinningSpeed;
[SerializeField] private float speed;
[SerializeField] private Rigidbody2D playerRB;

private void FixedUpdate()
{
    // 旋转更新:乘以Time.fixedDeltaTime保证帧率无关
    spinningValue += spinning * spinningSpeed * Time.fixedDeltaTime;
    playerRB.SetRotation(spinningValue);
    
    // 基于物体自身上方向设置移动速度
    playerRB.velocity = transform.up * vertical * speed;
}

public void Move(InputAction.CallbackContext context)
{
    vertical = context.ReadValue<Vector3>().y;
}
        
public void Spin(InputAction.CallbackContext context)
{
    spinning = context.ReadValue<Vector3>().y;
}

关键修改说明

  • 移动方向修正:用transform.up获取物体当前旋转后的自身上方向(也就是面向方向),将其作为移动的方向向量,替代原来固定的Vector3(0, vertical * speed)。这样物体就会沿自己的朝向移动。
  • 帧率一致性:旋转更新时加入Time.fixedDeltaTime,保证不管游戏帧率高低,旋转速度始终一致。
  • 物理时机调整:把刚体相关的操作(设置速度、旋转)移到FixedUpdate中,因为Unity的物理系统是按固定时间步长更新的,放在这里能避免移动或旋转出现抖动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:52:27