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

新手游戏开发求助:如何让Rigidbody沿相机朝向移动?

新手游戏开发求助:如何让Rigidbody沿相机朝向移动?

嘿,作为刚入门游戏开发(甚至连编码都是新手)的小伙伴,我太懂你这种“知道哪里有问题但不知道怎么改”的挠头感了!你的核心问题其实很明确:现在的移动是基于世界坐标系的X/Z轴(不管镜头朝哪,按W都是往世界Z轴正方向走),而不是跟着相机的朝向走。不用重写整个代码,只要改移动逻辑那几行就行,来一步步看:

问题根源

你当前创建的movement是直接用moveValue.x(世界右方向)和moveValue.y(世界前方向)拼出来的Vector3,完全没考虑相机的旋转角度,所以镜头转了之后,移动方向自然和镜头对着的地方不一致。

解决步骤(只改移动部分代码)

把你Update函数里的移动代码段(从Vector2 moveValueraw = ...到body.AddForce(movement);)替换成下面的代码就行,我会每一步解释:

// Moving the player on the X and Z axis
Vector2 moveValueraw = moveAction.ReadValue<Vector2>();
// 保留你的移动幅度放大逻辑
Vector2 moveValue = moveValueraw * 5f;

// 关键修改:获取相机的水平朝向(忽略Y轴,保持水平移动)
// 相机的forward是镜头正前方,把Y轴设为0就只保留水平方向,归一化防止斜向移动速度变快
Vector3 camForward = Vector3.Scale(cam.forward, new Vector3(1, 0, 1)).normalized;
// 相机的right是镜头正右方,同样处理Y轴
Vector3 camRight = Vector3.Scale(cam.right, new Vector3(1, 0, 1)).normalized;

// 计算基于相机朝向的最终移动方向:前后用相机前方向,左右用相机右方向
Vector3 movement = camForward * moveValue.y + camRight * moveValue.x;

// Apply changes
body.AddForce(movement);
// End of Movement

为什么这样改?

  • cam.forward是相机的正前方,但默认包含Y轴(比如镜头抬头时前方向会向上),用Vector3.Scale把Y轴清零,就得到了水平的相机前方向
  • cam.right同理,是相机的水平右方向
  • 最后把前后移动(moveValue.y)和左右移动(moveValue.x)分别映射到这两个方向,相加就是玩家应该移动的正确方向

额外的小提醒(可选,不想改可以忽略)

  1. 物理逻辑建议放在FixedUpdate里处理,比如把AddForce的代码移到FixedUpdate,因为Update是每帧调用,FixedUpdate是固定时间步调用,更适合物理操作
  2. 你当前的相机旋转逻辑直接用欧拉角可能会有“万向锁”问题,而且没有限制抬头低头的角度(比如转成倒立),可以后续改成累计角度再用Quaternion.Euler来设置旋转,比如:
    // 在Start里初始化camx为0而不是cam.rotation.x
    camx = 0f;
    // Update里的旋转逻辑
    Vector2 lookValueraw = lookAction.ReadValue<Vector2>();
    camx += lookValueraw.x * sensitivity * Time.deltaTime;
    camy += lookValueraw.y * sensitivity * Time.deltaTime;
    // 限制X轴旋转(-90到90度,防止倒立)
    camy = Mathf.Clamp(camy, -90f, 90f);
    // 玩家绕Y轴转(左右看),相机绕X轴转(上下看)
    player.rotation = Quaternion.Euler(0, camx, 0);
    cam.localRotation = Quaternion.Euler(-camy, 0, 0);
    
    不过这是额外优化,先解决你的核心移动问题就好!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 10:18:05