Unity 3D俯视角游戏如何实现控制器摇杆的8方向移动功能
Unity新输入系统摇杆8方向限制实现方案
方案一:使用输入系统内置处理器(无需改代码,推荐)
直接在Input Action配置中添加处理器即可完成输入量化,步骤如下:
- 打开你项目中创建的Input Actions资源文件,找到绑定了移动输入的
MoveAction - 点击该Action右侧的加号按钮,依次选择
Processors > Vector2 > Stick Deadzone,添加摇杆死区过滤漂移,可根据手柄情况调整死区阈值 - 再次点击加号按钮,依次选择
Processors > Vector2 > Quantize (Vector2),将参数Steps设置为8,系统会自动把连续的摇杆输入量化为8个离散方向 - 保存配置后原有代码无需任何修改即可生效
方案二:代码层面手动处理
如果不想修改输入配置,直接修改GetInput方法的逻辑即可完成8方向转换:
void GetInput() { Vector2 rawInput = playerInput.Player.Move.ReadValue<Vector2>(); // 死区过滤,避免摇杆未回中时误触发移动 if (rawInput.magnitude < 0.15f) { input = Vector2.zero; return; } // 计算原始输入的弧度角度 float rawRad = Mathf.Atan2(rawInput.y, rawInput.x); // 按45度(π/4弧度)为单位量化角度,对应8个方向 float quantizedRad = Mathf.Round(rawRad / (Mathf.PI / 4f)) * (Mathf.PI / 4f); // 转换回标准化的方向向量 input = new Vector2(Mathf.Cos(quantizedRad), Mathf.Sin(quantizedRad)); }
额外优化提示
你现有代码中Move方法里的移动速度硬编码为200,没有用到你声明的可序列化字段playerSpeed,建议修改为如下代码,方便在Inspector面板直接调整移动速度:
void Move() { rb.velocity = transform.forward * playerSpeed * Time.fixedDeltaTime; }
内容的提问来源于stack exchange,提问作者F. Pullem
相关产品推荐
相关产品推荐

