@react-three/rapier 0.7.7 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/declarations/src/Debug.d.ts +0 -8
- package/dist/declarations/src/api.d.ts +2 -1
- package/dist/declarations/src/types.d.ts +4 -0
- package/dist/react-three-rapier.cjs.dev.js +81 -226
- package/dist/react-three-rapier.cjs.prod.js +81 -226
- package/dist/react-three-rapier.esm.js +58 -203
- package/package.json +4 -1
- package/readme.md +12 -7
@@ -1,10 +1,10 @@
|
|
1
|
-
import { EventQueue, RigidBodyDesc, ColliderDesc, ActiveEvents
|
1
|
+
import { EventQueue, RigidBodyDesc, ColliderDesc, ActiveEvents } from '@dimforge/rapier3d-compat';
|
2
2
|
export { CoefficientCombineRule, Collider as RapierCollider, RigidBody as RapierRigidBody } from '@dimforge/rapier3d-compat';
|
3
|
-
import React, { useRef, useState, useEffect, useMemo, createContext, useContext, memo, forwardRef, useImperativeHandle, useLayoutEffect } from 'react';
|
3
|
+
import React$1, { useRef, useState, useEffect, useMemo, createContext, useContext, memo, forwardRef, useImperativeHandle, useLayoutEffect } from 'react';
|
4
4
|
import { useAsset } from 'use-asset';
|
5
5
|
import { useFrame } from '@react-three/fiber';
|
6
|
-
import { Quaternion, Euler, Vector3, Object3D, Matrix4, MathUtils, InstancedMesh,
|
7
|
-
import { mergeVertices
|
6
|
+
import { Quaternion, Euler, Vector3, Object3D, Matrix4, MathUtils, InstancedMesh, BufferAttribute, DynamicDrawUsage } from 'three';
|
7
|
+
import { mergeVertices } from 'three-stdlib';
|
8
8
|
|
9
9
|
const _quaternion = new Quaternion();
|
10
10
|
new Euler();
|
@@ -195,7 +195,8 @@ const createWorldApi = ref => {
|
|
195
195
|
x,
|
196
196
|
y,
|
197
197
|
z
|
198
|
-
}
|
198
|
+
},
|
199
|
+
debugRender: () => ref.current().debugRender()
|
199
200
|
};
|
200
201
|
}; // TODO: Broken currently, waiting for Rapier3D to fix
|
201
202
|
|
@@ -485,7 +486,7 @@ const Physics = ({
|
|
485
486
|
colliderEvents,
|
486
487
|
isPaused: _paused
|
487
488
|
}), [_paused]);
|
488
|
-
return /*#__PURE__*/React.createElement(RapierContext.Provider, {
|
489
|
+
return /*#__PURE__*/React$1.createElement(RapierContext.Provider, {
|
489
490
|
value: context
|
490
491
|
}, children);
|
491
492
|
};
|
@@ -885,7 +886,8 @@ const createColliderPropsFromChildren = ({
|
|
885
886
|
const colliderProps = [];
|
886
887
|
object.updateWorldMatrix(true, false);
|
887
888
|
const invertedParentMatrixWorld = object.matrixWorld.clone().invert();
|
888
|
-
|
889
|
+
|
890
|
+
const colliderFromChild = child => {
|
889
891
|
if ("isMesh" in child) {
|
890
892
|
if (_ignoreMeshColliders && isChildOfMeshCollider(child)) return;
|
891
893
|
const worldScale = child.getWorldScale(_scale);
|
@@ -910,7 +912,14 @@ const createColliderPropsFromChildren = ({
|
|
910
912
|
scale: [worldScale.x, worldScale.y, worldScale.z]
|
911
913
|
}));
|
912
914
|
}
|
913
|
-
}
|
915
|
+
};
|
916
|
+
|
917
|
+
if (options.includeInvisible) {
|
918
|
+
object.traverse(colliderFromChild);
|
919
|
+
} else {
|
920
|
+
object.traverseVisible(colliderFromChild);
|
921
|
+
}
|
922
|
+
|
914
923
|
return colliderProps;
|
915
924
|
};
|
916
925
|
const getColliderArgsFromGeometry = (geometry, colliders) => {
|
@@ -1155,7 +1164,7 @@ const usePrismaticJoint = (body1, body2, [body1Anchor, body2Anchor, axis]) => {
|
|
1155
1164
|
};
|
1156
1165
|
|
1157
1166
|
// Colliders
|
1158
|
-
const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
1167
|
+
const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React$1.forwardRef((props, forwardedRef) => {
|
1159
1168
|
const {
|
1160
1169
|
children,
|
1161
1170
|
position,
|
@@ -1175,7 +1184,7 @@ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React.forwardRef((props, for
|
|
1175
1184
|
return forwardedRef;
|
1176
1185
|
}
|
1177
1186
|
|
1178
|
-
const result = /*#__PURE__*/React.createRef();
|
1187
|
+
const result = /*#__PURE__*/React$1.createRef();
|
1179
1188
|
result.current = [];
|
1180
1189
|
return result;
|
1181
1190
|
}, []);
|
@@ -1216,7 +1225,7 @@ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React.forwardRef((props, for
|
|
1216
1225
|
}, [props, rigidBodyContext === null || rigidBodyContext === void 0 ? void 0 : rigidBodyContext.options]);
|
1217
1226
|
useUpdateColliderOptions(collidersRef, mergedProps, colliderStates);
|
1218
1227
|
useColliderEvents(collidersRef, mergedProps, colliderEvents);
|
1219
|
-
return /*#__PURE__*/React.createElement("object3D", {
|
1228
|
+
return /*#__PURE__*/React$1.createElement("object3D", {
|
1220
1229
|
position: position,
|
1221
1230
|
rotation: rotation,
|
1222
1231
|
quaternion: quaternion,
|
@@ -1224,56 +1233,56 @@ const AnyCollider = /*#__PURE__*/memo( /*#__PURE__*/React.forwardRef((props, for
|
|
1224
1233
|
ref: ref
|
1225
1234
|
}, children);
|
1226
1235
|
}));
|
1227
|
-
const CuboidCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1228
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1236
|
+
const CuboidCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1237
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1229
1238
|
shape: "cuboid",
|
1230
1239
|
ref: ref
|
1231
1240
|
}));
|
1232
1241
|
});
|
1233
|
-
const RoundCuboidCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1234
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1242
|
+
const RoundCuboidCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1243
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1235
1244
|
shape: "roundCuboid",
|
1236
1245
|
ref: ref
|
1237
1246
|
}));
|
1238
1247
|
});
|
1239
|
-
const BallCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1240
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1248
|
+
const BallCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1249
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1241
1250
|
shape: "ball",
|
1242
1251
|
ref: ref
|
1243
1252
|
}));
|
1244
1253
|
});
|
1245
|
-
const CapsuleCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1246
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1254
|
+
const CapsuleCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1255
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1247
1256
|
shape: "capsule",
|
1248
1257
|
ref: ref
|
1249
1258
|
}));
|
1250
1259
|
});
|
1251
|
-
const HeightfieldCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1252
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1260
|
+
const HeightfieldCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1261
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1253
1262
|
shape: "heightfield",
|
1254
1263
|
ref: ref
|
1255
1264
|
}));
|
1256
1265
|
});
|
1257
|
-
const TrimeshCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1258
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1266
|
+
const TrimeshCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1267
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1259
1268
|
shape: "trimesh",
|
1260
1269
|
ref: ref
|
1261
1270
|
}));
|
1262
1271
|
});
|
1263
|
-
const ConeCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1264
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1272
|
+
const ConeCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1273
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1265
1274
|
shape: "cone",
|
1266
1275
|
ref: ref
|
1267
1276
|
}));
|
1268
1277
|
});
|
1269
|
-
const CylinderCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1270
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1278
|
+
const CylinderCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1279
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1271
1280
|
shape: "cylinder",
|
1272
1281
|
ref: ref
|
1273
1282
|
}));
|
1274
1283
|
});
|
1275
|
-
const ConvexHullCollider = /*#__PURE__*/React.forwardRef((props, ref) => {
|
1276
|
-
return /*#__PURE__*/React.createElement(AnyCollider, _extends({}, props, {
|
1284
|
+
const ConvexHullCollider = /*#__PURE__*/React$1.forwardRef((props, ref) => {
|
1285
|
+
return /*#__PURE__*/React$1.createElement(AnyCollider, _extends({}, props, {
|
1277
1286
|
shape: "convexHull",
|
1278
1287
|
ref: ref
|
1279
1288
|
}));
|
@@ -1300,16 +1309,16 @@ const RigidBody = /*#__PURE__*/memo( /*#__PURE__*/forwardRef((props, ref) => {
|
|
1300
1309
|
api,
|
1301
1310
|
options: props
|
1302
1311
|
}), [object, api, props]);
|
1303
|
-
return /*#__PURE__*/React.createElement(RigidBodyContext.Provider, {
|
1312
|
+
return /*#__PURE__*/React$1.createElement(RigidBodyContext.Provider, {
|
1304
1313
|
value: contextValue
|
1305
|
-
}, /*#__PURE__*/React.createElement("object3D", _extends({
|
1314
|
+
}, /*#__PURE__*/React$1.createElement("object3D", _extends({
|
1306
1315
|
ref: object
|
1307
1316
|
}, objectProps, {
|
1308
1317
|
position: position,
|
1309
1318
|
rotation: rotation,
|
1310
1319
|
quaternion: quaternion,
|
1311
1320
|
scale: scale
|
1312
|
-
}), children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
|
1321
|
+
}), children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React$1.createElement(AnyCollider, _extends({
|
1313
1322
|
key: index
|
1314
1323
|
}, colliderProps)))));
|
1315
1324
|
}));
|
@@ -1334,188 +1343,34 @@ const MeshCollider = props => {
|
|
1334
1343
|
});
|
1335
1344
|
}, [physicsOptions, options]);
|
1336
1345
|
const childColliderProps = useChildColliderProps(object, mergedOptions, false);
|
1337
|
-
return /*#__PURE__*/React.createElement("object3D", {
|
1346
|
+
return /*#__PURE__*/React$1.createElement("object3D", {
|
1338
1347
|
ref: object,
|
1339
1348
|
userData: {
|
1340
1349
|
r3RapierType: "MeshCollider"
|
1341
1350
|
}
|
1342
|
-
}, children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
|
1351
|
+
}, children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React$1.createElement(AnyCollider, _extends({
|
1343
1352
|
key: index
|
1344
1353
|
}, colliderProps))));
|
1345
1354
|
};
|
1346
1355
|
|
1347
|
-
const
|
1348
|
-
switch (collider.shape.type) {
|
1349
|
-
case ShapeType.Cuboid:
|
1350
|
-
{
|
1351
|
-
const {
|
1352
|
-
x,
|
1353
|
-
y,
|
1354
|
-
z
|
1355
|
-
} = collider.shape.halfExtents;
|
1356
|
-
return new BoxGeometry(x * 2 + 0.01, y * 2 + 0.01, z * 2 + 0.01);
|
1357
|
-
}
|
1358
|
-
|
1359
|
-
case ShapeType.RoundCuboid:
|
1360
|
-
{
|
1361
|
-
const {
|
1362
|
-
x,
|
1363
|
-
y,
|
1364
|
-
z
|
1365
|
-
} = collider.shape.halfExtents;
|
1366
|
-
const radius = collider.shape.borderRadius;
|
1367
|
-
return new RoundedBoxGeometry(x * 2 + radius * 2, y * 2 + radius * 2, z * 2 + radius * 2, 8, radius);
|
1368
|
-
}
|
1369
|
-
|
1370
|
-
case ShapeType.Ball:
|
1371
|
-
{
|
1372
|
-
const r = collider.shape.radius;
|
1373
|
-
return new SphereGeometry(r + +0.01, 8, 8);
|
1374
|
-
}
|
1375
|
-
|
1376
|
-
case ShapeType.TriMesh:
|
1377
|
-
{
|
1378
|
-
var _g$index;
|
1379
|
-
|
1380
|
-
const v = collider.shape.vertices;
|
1381
|
-
const i = collider.shape.indices;
|
1382
|
-
const g = new BufferGeometry(); // Vertices are not always a float3darray (???), so we need to convert them
|
1383
|
-
|
1384
|
-
const safeVerts = Float32Array.from(v);
|
1385
|
-
g.setAttribute("position", new BufferAttribute(safeVerts, 3));
|
1386
|
-
(_g$index = g.index) === null || _g$index === void 0 ? void 0 : _g$index.set(i);
|
1387
|
-
g.setDrawRange(0, g.attributes.position.array.length / 3 - 1);
|
1388
|
-
return g;
|
1389
|
-
}
|
1390
|
-
|
1391
|
-
case ShapeType.ConvexPolyhedron:
|
1392
|
-
{
|
1393
|
-
const cv = collider.shape.vertices; // Vertices are not always a float3darray (???), so we need to convert them
|
1394
|
-
|
1395
|
-
const safeVerts = Float32Array.from(cv);
|
1396
|
-
const cg = new BufferGeometry();
|
1397
|
-
cg.setAttribute("position", new BufferAttribute(safeVerts, 3));
|
1398
|
-
return cg;
|
1399
|
-
}
|
1400
|
-
|
1401
|
-
case ShapeType.Cylinder:
|
1402
|
-
{
|
1403
|
-
const r = collider.shape.radius;
|
1404
|
-
const h = collider.shape.halfHeight;
|
1405
|
-
const g = new CylinderGeometry(r, r, h * 2);
|
1406
|
-
return g;
|
1407
|
-
}
|
1408
|
-
|
1409
|
-
case ShapeType.Capsule:
|
1410
|
-
{
|
1411
|
-
const r = collider.shape.radius;
|
1412
|
-
const h = collider.shape.halfHeight;
|
1413
|
-
const g = new CapsuleGeometry(r, h * 2, 4, 8);
|
1414
|
-
return g;
|
1415
|
-
}
|
1416
|
-
|
1417
|
-
case ShapeType.Cone:
|
1418
|
-
{
|
1419
|
-
const r = collider.shape.radius;
|
1420
|
-
const h = collider.shape.halfHeight;
|
1421
|
-
const g = new ConeGeometry(r, h * 2, 16);
|
1422
|
-
return g;
|
1423
|
-
}
|
1424
|
-
|
1425
|
-
case ShapeType.HeightField:
|
1426
|
-
{
|
1427
|
-
const rows = collider.shape.nrows;
|
1428
|
-
const cols = collider.shape.ncols;
|
1429
|
-
const heights = collider.shape.heights;
|
1430
|
-
const scale = collider.shape.scale;
|
1431
|
-
const g = new PlaneGeometry(scale.x, scale.z, cols, rows);
|
1432
|
-
const verts = g.attributes.position.array;
|
1433
|
-
verts.forEach((v, index) => verts[index * 3 + 2] = heights[index] * scale.y);
|
1434
|
-
g.scale(1, -1, 1);
|
1435
|
-
g.rotateX(-Math.PI / 2);
|
1436
|
-
g.rotateY(-Math.PI / 2);
|
1437
|
-
return g;
|
1438
|
-
}
|
1439
|
-
}
|
1440
|
-
|
1441
|
-
return new BoxGeometry(1, 1, 1);
|
1442
|
-
};
|
1443
|
-
|
1444
|
-
const DebugShape = /*#__PURE__*/memo(({
|
1445
|
-
colliderHandle,
|
1446
|
-
color,
|
1447
|
-
sleepColor
|
1448
|
-
}) => {
|
1356
|
+
const Debug = () => {
|
1449
1357
|
const {
|
1450
1358
|
world
|
1451
1359
|
} = useRapier();
|
1452
1360
|
const ref = useRef(null);
|
1453
|
-
const [material] = useState(new MeshBasicMaterial({
|
1454
|
-
color,
|
1455
|
-
wireframe: true
|
1456
|
-
}));
|
1457
|
-
useFrame(() => {
|
1458
|
-
const collider = world.getCollider(colliderHandle);
|
1459
|
-
|
1460
|
-
if (ref.current && collider) {
|
1461
|
-
const {
|
1462
|
-
x: rx,
|
1463
|
-
y: ry,
|
1464
|
-
z: rz,
|
1465
|
-
w: rw
|
1466
|
-
} = collider.rotation();
|
1467
|
-
const {
|
1468
|
-
x,
|
1469
|
-
y,
|
1470
|
-
z
|
1471
|
-
} = collider.translation();
|
1472
|
-
const parent = collider.parent();
|
1473
|
-
|
1474
|
-
if (parent !== null && parent !== void 0 && parent.isSleeping() || parent !== null && parent !== void 0 && parent.isFixed() || parent !== null && parent !== void 0 && parent.isKinematic()) {
|
1475
|
-
material.color = new Color(sleepColor);
|
1476
|
-
} else {
|
1477
|
-
material.color = new Color(color);
|
1478
|
-
}
|
1479
|
-
|
1480
|
-
ref.current.position.set(x, y, z);
|
1481
|
-
ref.current.rotation.setFromQuaternion(new Quaternion(rx, ry, rz, rw));
|
1482
|
-
}
|
1483
|
-
});
|
1484
|
-
const geometry = useMemo(() => {
|
1485
|
-
const collider = world.getCollider(colliderHandle);
|
1486
|
-
return geometryFromCollider(collider);
|
1487
|
-
}, [colliderHandle]);
|
1488
|
-
return /*#__PURE__*/React.createElement("mesh", {
|
1489
|
-
ref: ref,
|
1490
|
-
material: material
|
1491
|
-
}, /*#__PURE__*/React.createElement("primitive", {
|
1492
|
-
object: geometry,
|
1493
|
-
attach: "geometry"
|
1494
|
-
}));
|
1495
|
-
});
|
1496
|
-
const Debug = ({
|
1497
|
-
color: _color = "red",
|
1498
|
-
sleepColor: _sleepColor = "blue"
|
1499
|
-
}) => {
|
1500
|
-
const {
|
1501
|
-
world
|
1502
|
-
} = useRapier();
|
1503
|
-
const [colliders, setColliders] = useState([]);
|
1504
|
-
useRef({});
|
1505
|
-
|
1506
1361
|
useFrame(() => {
|
1507
|
-
const
|
1508
|
-
|
1509
|
-
|
1510
|
-
|
1511
|
-
|
1362
|
+
const mesh = ref.current;
|
1363
|
+
if (!mesh) return;
|
1364
|
+
const buffers = world.debugRender();
|
1365
|
+
mesh.geometry.setAttribute("position", new BufferAttribute(buffers.vertices, 3));
|
1366
|
+
mesh.geometry.setAttribute("color", new BufferAttribute(buffers.colors, 4));
|
1512
1367
|
});
|
1513
|
-
return /*#__PURE__*/React.createElement("
|
1514
|
-
|
1515
|
-
|
1516
|
-
color:
|
1517
|
-
|
1518
|
-
})));
|
1368
|
+
return /*#__PURE__*/React.createElement("lineSegments", {
|
1369
|
+
ref: ref
|
1370
|
+
}, /*#__PURE__*/React.createElement("lineBasicMaterial", {
|
1371
|
+
color: 0xffffff,
|
1372
|
+
vertexColors: true
|
1373
|
+
}), /*#__PURE__*/React.createElement("bufferGeometry", null));
|
1519
1374
|
};
|
1520
1375
|
|
1521
1376
|
const _excluded = ["positions", "rotations", "children"];
|
@@ -1620,11 +1475,11 @@ const InstancedRigidBodies = /*#__PURE__*/forwardRef((props, ref) => {
|
|
1620
1475
|
options: mergedOptions
|
1621
1476
|
};
|
1622
1477
|
}, [api, mergedOptions]);
|
1623
|
-
return /*#__PURE__*/React.createElement(RigidBodyContext.Provider, {
|
1478
|
+
return /*#__PURE__*/React$1.createElement(RigidBodyContext.Provider, {
|
1624
1479
|
value: contextValue
|
1625
|
-
}, /*#__PURE__*/React.createElement("object3D", {
|
1480
|
+
}, /*#__PURE__*/React$1.createElement("object3D", {
|
1626
1481
|
ref: object
|
1627
|
-
}, props.children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React.createElement(AnyCollider, _extends({
|
1482
|
+
}, props.children, childColliderProps.map((colliderProps, index) => /*#__PURE__*/React$1.createElement(AnyCollider, _extends({
|
1628
1483
|
key: index
|
1629
1484
|
}, colliderProps)))));
|
1630
1485
|
});
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@react-three/rapier",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.8.0",
|
4
4
|
"source": "src/index.ts",
|
5
5
|
"main": "dist/react-three-rapier.cjs.js",
|
6
6
|
"module": "dist/react-three-rapier.esm.js",
|
@@ -8,6 +8,9 @@
|
|
8
8
|
"files": [
|
9
9
|
"dist"
|
10
10
|
],
|
11
|
+
"scripts": {
|
12
|
+
"ts": "tsc -w"
|
13
|
+
},
|
11
14
|
"devDependencies": {
|
12
15
|
"@react-three/drei": "^9.34.1",
|
13
16
|
"@react-three/fiber": "^8.8.9",
|
package/readme.md
CHANGED
@@ -122,6 +122,16 @@ const Scene = () => (
|
|
122
122
|
);
|
123
123
|
```
|
124
124
|
|
125
|
+
If part of our meshes are invisible and you want to include them in the collider creation, use the `includeInvisible` flag.
|
126
|
+
|
127
|
+
```tsx
|
128
|
+
<RigidBody colliders="hull" includeInvisible>
|
129
|
+
<object3D>
|
130
|
+
<Suzanne visible={false} />
|
131
|
+
</object3D>
|
132
|
+
</RigidBody>
|
133
|
+
```
|
134
|
+
|
125
135
|
## Instanced Meshes
|
126
136
|
|
127
137
|
Instanced meshes can also be used and have automatic colliders generated from their mesh.
|
@@ -185,12 +195,7 @@ const Scene = () => {
|
|
185
195
|
|
186
196
|
## Debug
|
187
197
|
|
188
|
-
Use the Debug component to see live representations of all colliders in a scene.
|
189
|
-
|
190
|
-
- The `color` prop sets the color of awake colliders that are affected by forces.
|
191
|
-
- The `sleepColor` prop set the color of a static (fixed, or kinematic) or sleeping collider.
|
192
|
-
|
193
|
-
> Note: Experimental. Not all shapes are supported. Unsupported shapes are always represented by cubes.
|
198
|
+
Use the Debug component to see live representations of all colliders in a scene, using the live debug buffer from the physics engine.
|
194
199
|
|
195
200
|
```tsx
|
196
201
|
import { Box, Sphere } from "@react-three/drei";
|
@@ -199,7 +204,7 @@ import { RigidBody, Debug } from "@react-three/rapier";
|
|
199
204
|
const Scene = () => {
|
200
205
|
return (
|
201
206
|
<Physics>
|
202
|
-
<Debug
|
207
|
+
<Debug />
|
203
208
|
|
204
209
|
<RigidBody>
|
205
210
|
<Box />
|