Files
Genarrative/.codex/plugins/game-studio/references/rapier-integration-starter.md
T
kdletters 071faa482c 统一 Rust 与 TypeScript 格式化门禁
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口

完成项目 TypeScript/Prettier 与 Rust 全量格式化

修复 Pingora expected executable 门禁的空白敏感误报

同步开发运维文档与 AGC skill pack 格式化忽略规则
2026-09-01 16:28:34 +08:00

1.0 KiB

Rapier Integration Starter

Use this as the smallest canonical pattern for adding physics without letting it take over the whole runtime.

Vanilla Three.js

import RAPIER from '@dimforge/rapier3d-compat';

await RAPIER.init();

const world = new RAPIER.World({ x: 0, y: -9.81, z: 0 });
const body = world.createRigidBody(
  RAPIER.RigidBodyDesc.dynamic().setTranslation(0, 2, 0),
);
world.createCollider(RAPIER.ColliderDesc.cuboid(0.5, 0.5, 0.5), body);

renderer.setAnimationLoop(() => {
  world.step();
  const p = body.translation();
  mesh.position.set(p.x, p.y, p.z);
  renderer.render(scene, camera);
});

React Three Fiber

import { Physics, RigidBody } from '@react-three/rapier';

<Physics gravity={[0, -9.81, 0]}>
  <RigidBody colliders="cuboid">
    <mesh>
      <boxGeometry args={[1, 1, 1]} />
      <meshStandardMaterial color="#3dd9b8" />
    </mesh>
  </RigidBody>
</Physics>;

Notes

  • Keep physics state synchronized through an explicit bridge.
  • Do not bury gameplay rules inside render or physics callbacks.