pmndrs/ecctrl完美解决了这些痛点,它是一个模块化、物理驱动的控制器工具包,目前已更新至 Ecctrl 2.0,功能更强大、稳定性更高、扩展性更好。项目核心特色Ecctrl 不是简单的“键盘移动角色”,而是深度集成物理引擎的控制器系统,让你的角色/物体真正成为物理世界的一部分:●ShapeCast 角色控制器(默认模式):比传统 RayCast 更稳定。支持无缝跨小缝隙、准确站立点检测、斜坡判断,还可切换回 RayCast 低成本模式。角色会“浮动”并通过弹簧+阻尼力实现自然移动,能对支撑物体施加反作用力(站立、移动、跳跃时都会推/拖动平台),完美跟随移动/旋转平台。

●自定义重力系统:支持球形重力、柱形重力、墙壁行走、重力隧道等任意位置-based 重力场。角色、载具、无人机和自定义 RigidBody 均可共享。非常适合行星行走、零重力、特殊关卡设计。

●车辆与无人机系统:

▪ShapeCast Wheels:扭矩驱动的车轮,支持可编辑的纵向/横向滑移曲线(通过 Curve LUT)。▪Thrust Propeller 无人机:推力+反作用扭矩混合,实现稳定飞行控制。

●Curve LUTs + Leva 可视化曲线编辑器:物理行为(如抓地力、引擎扭矩、转向、质量衰减)通过曲线定义,运行时采样极快。Leva 插件允许实时拖拽调整曲线点、切线、权重,调参如丝般顺滑。

●动画状态管理:内置运行时状态(IDLE、WALK、RUN、各种 JUMP 状态等),通过 Zustand store 暴露,轻松与@react-three/drei的useAnimations集成。●触摸控制 + 时间控制:内置 Joystick 和 VirtualButton,支持移动端。TimeControl 可暂停/慢放物理世界,实现子弹时间效果。●相机增强:支持碰撞检测、缩放、FixedCamera 模式(角色转身时相机跟随旋转,类似某些开放世界游戏)、自定义重力下的 Up 轴适配等。●模块化导入:无需全量引入,只 import 需要部分(如ecctrl/vehicle、ecctrl/input、ecctrl/gravity等),轻量高效。最新更新亮点(Ecctrl 2.0 及近期)●2026 年 6 月 Ecctrl 2.0 同步发布:全面重构,稳定性、灵活性和模块化大幅提升,新增大量示例和文档优化。●新增控制模式:FixedCamera 模式、PointToMove(点击寻路)模式等控制模式切换。●细节优化:相机跟随、碰撞、传感器尺寸调整等细节优化。●持续的 Rapier 版本兼容和 TypeScript 改进。项目提供在线 Demo(ecctrl.app),强烈建议先去玩一玩:自定义重力、车辆、无人机、触摸控制、曲线编辑、时间暂停等功能一应俱全,是快速验证想法的最佳场所。安装与快速上手
npm install ecctrl
# Peer deps
npm install three react @react-three/fiber @react-three/rapier
# 可选
npm install @react-three/drei leva
最简角色示例(ShapeCast):
import{ KeyboardControls }from"@react-three/drei";
import{ Physics }from"@react-three/rapier";
import{ Ecctrl }from"ecctrl";
constkeyboardMap = [/* forward, backward, jump 等 */];
functionScene() {
return(
);
}
自定义重力只需加enableCustomGravity并设置全局重力为零,再用useCustomGravity定义场函数即可。详细 API 文档在仓库docs/api-reference.md。为什么推荐 Ecctrl?●物理真实感强:角色不是“浮空滑块”,而是真实参与物理交互。●高度可配置:从简单第三人称到复杂自定义重力世界,都能胜任。●开发者友好:模块化、运行时状态暴露、实时曲线编辑、丰富示例。无论你是做 indie 游戏、Web3D 体验、物理模拟,还是原型验证,Ecctrl 都能极大降低控制系统的开发成本,让你专注于创意本身。●GitHub:https://github.com/pmndrs/ecctrl●在线 Demo:https://ecctrl.app/●作者:https://github.com/ErdongChen-Andrew
