{"repo":"hh-hang/three-player-controller","free":true,"listed":false,"github":"https://github.com/hh-hang/three-player-controller","clone":"git clone https://github.com/hh-hang/three-player-controller.git","description":"A first-person & third-person character controller for three.js","language":"TypeScript","stars":250,"topics":["character-controller","collision-detection","first-person","player-controller","third-person","three-mesh-bvh","threejs","camera-obstacle-avoidance","vehicle-control"],"license":"MIT","category":"game-templates","readme_excerpt":"中文 English three-player-controller [![NPM Package][npm]][npm-url] [![Github][github]][github-url] 基于 three.js 的轻量级玩家控制器，开箱即用，提供人物胶囊体碰撞、动画、第一 / 三人称切换、相机避障，以及可选的车辆驾驶（需 Rapier）；借助 three-mesh-bvh 加速碰撞检测，大场景下高性能运行。 示例 glTF Scene 3DTiles Scene 3DGS Scene Office Building FPS Game Foot IK 安装 可选依赖 如果需要车辆功能，请额外安装 Rapier： 本地运行 浏览器访问 http://localhost:5173/three-player-controller/ 。 使用 player.update() 内部已接管传入的相机控制器，渲染循环中请勿再调用 controls.update() ，否则会与内部的相机逻辑冲突。 推荐在外部加载人物 / 车辆模型后传入 model 和 animations 。内置 url 只走 GLTFLoader ，仅支持 glTF / GLB；外部传入常见如 glTF / GLB、FBX 等。 完整参数示例 init() loadVehicleModel() Foot IK 插件 未传 skeleton 时会根据常见骨骼名自动匹配。静止状态保留动画膝盖 pole，移动状态使用角色前后平面内的稳定 pole。脚步相位会离线采样 playerModelConfig 中的移动动画，用于区分支撑脚和摆动脚。 player.destroy() 会自动销毁已注册插件。距离类配置为 scale=1 基准值（内部乘以 playerModelConfig.scale ），角度配置使用弧度。其余选项见 FootIKOptions 。完整示例见 example/footIK.js 。 API 生命周期 方法 说明 --- --- init(opts, callback?) 初始化控制器，资源加载完成后执行 callback 。 update(dt?) 每帧更新移动、碰撞和动画；内部已接管传入的相机控制器，渲染循环中无需再调用 controls.update() 。 destroy() 销毁控制器并移除事件监听。 reset(pos?) 将角色重置到指定位置或初始位置。 use(plugin) 注册插件，见 PlayerPlugin 。 unuse(plugin) 卸载已注册插件。 getPlugins() 返回当前插件列表的只读副本。 switchPlayerModel(model) 运行时切换角色模型，并保留当前位置和朝向。 loadVehicleModel(opts) 加载车辆，可重复调用加载多辆车。 resetVehicle() 将当前驾驶车辆翻正复位（未上车时无效）。 changeView() 切换第一 / 第三人称视角。 setFirstPersonCamera(vertAngle?) 直接进入第一人称，可指定初始垂直角度。 buildStaticCollider(sources?) 构建静态碰撞体；不传则遍历整个场景。 addDynamicCollider(source) 注册动态碰撞体（如可移动平台）。 removeDynamicCollider(source) 移除已注册的动态碰撞体。 clearDynamicColliders() 移除所有动态碰撞体。 ","default_branch":null,"files":null,"tree":[],"storefront":"/r/hh-hang","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/hh-hang/three-player-controller/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}