When colliding with back faces, the character will not be able to move through back facing triangles. Use this if you have triangles that need to collide on both sides. Following constants available:
BFM_IGNORE_BACK_FACES
BFM_COLLIDE_BACK_FACES
Constant number, representing the back face collision mode.
Broadphase Filter Layer. Specifies what objects character can collide with.
Broadphase Filter Layer number.
How far we try to stay away from the geometry. This ensures that the sweep will hit as little as possible lowering the collision cost and reducing the risk of getting stuck.
Padding distance.
How far we're willing to penetrate geometry.
Penetration distance.
Internally the convex radius will be subtracted from the half extent, so the total size will not grow with the convex radius. You can increase this value to make the edges of the collision shape rounded.
Note:
SHAPE_BOX
and SHAPE_CYLINDER
.Number, representing the convex radius.
Specifies, whether to debug draw the collision shape.
Boolean, telling if the collision shape should be drawn using lines.
Allows to turn on/off debug draw for this body. Only works with a debug build.
Boolean to enable/disable a debug draw.
If debugDraw is enabled, this will specify whether to consider scene depth or not.
If set to false
, the debug lines will be drawn on top of everything, through other meshes.
Boolean, telling whether to consider scene depth.
Density of the object. Affects the mass of the object, when
BodyComponent.overrideMassProperties is set to OMP_CALCULATE_MASS_AND_INERTIA
(default, which will auto-calculate the mass using the shape dimensions and this density
value).
Number, representing the density of this collision shape.
Collision group bit of an object layer.
Two layers can collide if object1.group
and object2.mask
is non-zero and object2.group
and object1.mask
is non-zero. The behavior is similar to that of filtering in e.g. Bullet,
Rapier.
Unsigned integer.
Updates the filtering group bit. Value is ignored, if JoltInitSettings.bitFiltering is not set.
Unsigned integer.
Half-height of radius based shapes.
Note: Only used by SHAPE_CAPSULE
and SHAPE_CYLINDER
.
Number, representing half of the total height of the collision shape.
Cosine of the threshold angle. If the angle between the two triangles in HeightField is
bigger than this, the edge is active. note that a concave edge is always inactive. Setting
this value too small can cause ghost collisions with edges. Setting it too big can cause
depenetration artifacts (objects not depenetrating quickly). Valid ranges are between
cos(0 degrees)
and cos(90 degrees)
.
Number, representing radians of the threshold angle.
How many bits per sample to use to compress the HeightField. Can be in the range [1, 8]
.
Note that each sample is compressed relative to the min/max value of its block of
hfBlockSize * hfBlockSize
pixels so the effective precision is higher. Also note that
increasing hfBlockSize saves more memory, than reducing the amount of bits per sample.
Number, representing amount of compression bits.
The HeightField is divided in blocks of hfBlockSize * hfBlockSize * 2
triangles and the
acceleration structure culls blocks only, bigger block sizes reduce memory consumption, but
also reduce query performance. Sensible values are [2, 8]
. Does not need to be a power of
2. Note that at run-time Jolt performs one more grid subdivision, so the effective block
size is half of what is provided here.
Number, representing a block size.
The maximum angle between two hits contact normals that are allowed to be merged during hit reduction. Set to -1 to turn off.
Cosine of an angle.
Max angle.
Unique body index. This can change during entity lifecycle, e.g. every time entity is enabled, a new index is assigned and a new body is created. The index is used to map entity to body. Index can be re-used by another component if this component is disabled or destroyed (destroying related body as a result).
Integer number, representing the unique body index.
Specifies if the component describes a child of a compound shape.
Boolean, telling if this component describes a child shape of a compound shape.
Read-only. True, if the ground the character is standing on is too steep to walk on.
Boolean, telling if the ground is to steep.
Read-only. True, if the character is supported by normal or steep ground.
Boolean, telling if the character is supported.
Character linear velocity. Must be set by user. Backend will use it to calculate next position of the character.
Vec3 with linear velocity.
Sets the linear velocity of the character.
Linear velocity vector to set the character to.
Collision mask bit of an object layer.
Two layers can collide if object1.group
and object2.mask
is non-zero and object2.group
and object1.mask
is non-zero. The behavior is similar to that of filtering in e.g. Bullet,
Rapier.
Unsigned integer.
Updates the filtering mask bit. Value is ignored, if JoltInitSettings.bitFiltering is not set.
Unsigned integer.
Character mass. Used to push down objects with gravity when the character is standing on top.
The mass of the character.
Mass (kg).
Max amount of collision loops. The more loops, the higher the collision precision, the more expensive is the calculation.
Amount of collision loops.
How often constraint solver tries to step. The higher the number, the higher the precision, the more expensive it is to calculate.
Amount of constraint solving steps.
Max num hits to collect in order to avoid excess of contact points collection.
Number of hits.
Hits number.
Maximum angle of slope that character can still walk on.
Slope angle.
Maximum force with which the character can push other bodies (N).
Max strength of the character.
Maximum force with which the character can push other bodies (N).
Mesh is used when shape is SHAPE_MESH
or SHAPE_CONVEX_HULL
.
null
, when no
mesh is used.PlayCanvas Mesh instance.
Early out condition: If this much time is left to simulate we are done.
Remaining time to simulate.
Object Filter Layer. Defines which objects character can collide with.
Object Filter Layer number.
An entity with a kinematic or dynamic body, that will be paired with this character. A virtual character doesn't exist in the physics world. Pairing an entity gives it a physical world presence (allow raycasts and collisions detection vs character).
A paired entity.
Pairs an Entity with a body component to a character.
An entity to pair with the character.
This value governs how fast a penetration will be resolved:
Number of updates.
Recovery speed factor.
How far to scan outside of the shape for predictive contacts. A value of 0 will most likely cause the character to get stuck as it cannot properly calculate a sliding direction anymore. A value that's too high will cause ghost collisions.
Predictive contact distance.
Radius for radius based shapes, like SHAPE_CAPSULE
, SHAPE_SPHERE
, etc.
Number, specifying the shape radius.
This field contains the render asset ID, when a render asset is used for collision mesh or a convex hull.
Asset or its ID number. Will be null
if render asset is
not used.
Sets render asset as a collider. Note:
SHAPE_MESH
or SHAPE_CONVEX_HULL
in order for the render asset
to be used.Render asset or its id number.
Returns the default collision shape type of the character (the one it was created with).
A shape type constant number.
An extra offset applied to the shape in local space. If the shape already has a shapePosition offset, then both offsets are used.
Linear position offset of the shape.
Shape offset.
Ground state. Following constants available:
GROUND_STATE_ON_GROUND
GROUND_STATE_ON_STEEP_GROUND
GROUND_STATE_NOT_SUPPORTED
GROUND_STATE_IN_AIR
Number, representing the ground state.
A plane, defined in local space relative to the character. Every contact behind this plane can support the character, every contact in front of this plane is treated as only colliding with the player.
Plane that is used to define what surfaces support and what collide with character.
Applies entity scale on the shape. This makes it easier to adjust the size of the collision shape by simply scaling the entity.
Note: Some shapes do not support non-uniformed scales, like SHAPE_SPHERE
. Works best with
SHAPE_BOX
which you can scale on any axis. Others, like capsule and cone, can't have a
different radius on X
and Z
axis, but allow scaling Y
for their height.
Boolean, telling if the entity scale is applied on this collision shape.
Enables/disables the use of motion state for the character. Refer to BodyComponent.useMotionState for details.
Boolean, telling whether character controller will use a motion state.
Enables/Disables a motion state for this character.
Boolean to enable/disable the motion state.
User data to be associated with this character.
Number if user data is set. Otherwise null
;
Sets a number on the character shape.
Sometimes, it is useful to change a behavior of the character inside the collision callback. The callbacks lose the current scope they are executed in, so you can pass custom numbers as user data and read them from inside the callback.
Number, to set as user data on the character.
Maximum angle in radians between the ground normal in the horizontal plane and the character forward vector where we're willing to adjust the step forward test towards the contact normal.
Radians.
The distance to step forward after the step up.
Minimum distance.
An additional translation that is added when stepping down at the end. Allows you to step further down than up. Set to zero vector if you don't want this. Should be in the opposite direction of up.
Extra translation.
When running at a high frequency, stepForward can be very small and it's likely that you hit the side of the stairs on the way down. This could produce a normal that violates the max slope angle. If this happens, we test again using this distance from the up position to see if we find a valid slope.
Test distance.
Allows to add a shape to a mutable compound shape.
The index of a shape to add. It can be created by createShape.
Optional
localPos: Vec3 = Vec3.ZEROLocal position of the shape.
Optional
localRot: Quat = Quat.IDENTITYLocal rotation of the shape.
Optional
userData: number = 0User defined unsigned integer.
Fire an event, all additional arguments are passed on to the event listener.
Name of event to fire.
Optional
arg1: anyFirst argument that is passed to the event handler.
Optional
arg2: anySecond argument that is passed to the event handler.
Optional
arg3: anyThird argument that is passed to the event handler.
Optional
arg4: anyFourth argument that is passed to the event handler.
Optional
arg5: anyFifth argument that is passed to the event handler.
Optional
arg6: anySixth argument that is passed to the event handler.
Optional
arg7: anySeventh argument that is passed to the event handler.
Optional
arg8: anyEighth argument that is passed to the event handler.
Self for chaining.
Allows to modify a child shape of a mutable compound shape.
The child shape index. Children indices are zero based and have no gaps.
Optional
localPos: Vec3 = Vec3.ZEROLocal position of the shape.
Optional
localRot: Quat = Quat.IDENTITYLocal rotation of the shape.
Optional
shapeIndex: number = -1The index of a shape to add. It can be created by createShape.
Detach an event handler from an event. If callback is not provided then all callbacks are unbound from the event, if scope is not provided then all events with the callback will be unbound.
Optional
name: stringName of the event to unbind.
Optional
callback: HandleEventCallbackFunction to be unbound.
Optional
scope: objectScope that was used as the this when the event is fired.
Self for chaining.
const handler = () => {};
obj.on('test', handler);
obj.off(); // Removes all events
obj.off('test'); // Removes all events called 'test'
obj.off('test', handler); // Removes all handler functions, called 'test'
obj.off('test', handler, this); // Removes all handler functions, called 'test' with scope this
Attach an event handler to an event.
Name of the event to bind the callback to.
Function that is called when event is fired. Note the callback is limited to 8 arguments.
Optional
scope: objectObject to use as 'this' when the event is fired, defaults to current this.
Can be used for removing event in the future.
Attach an event handler to an event. This handler will be removed after being fired once.
Name of the event to bind the callback to.
Function that is called when event is fired. Note the callback is limited to 8 arguments.
Optional
scope: objectObject to use as 'this' when the event is fired, defaults to current this.
Allows to remove a child shape from a mutable compound shape. The children are indexed in order they were added. Indices are zero based and have no gaps. If you remove a child, then the next child takes its index.
For example, if you remove child under index 0
, then all children shift there indices, so
that the child with index 1
, becomes a child with index 0
, etc.
The index of a child shape to remove.
Allows to change the shape of the character collider.
The shape index to switch to. It can be created by createShape. Use negative number to reset to original shape.
Callback function that will accept a boolean, telling if the shape change was successful.
Interface
Boolean, whether the shape was successfully changed or not. If there
is not enough physical space to create the shape, the shape change will fail and this will be
false
.
Char Component. Describes the properties of a Jolt Virtual Character.