如何让玩家对象沿自身面向方向移动?
解决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
相关产品推荐
相关产品推荐

