- Qt 6.12
- Qt Quick 3D Physics
- QML Types
- CharacterController
- Qt Quick 3D Physics | Commercial or GPLv3

# CharacterController QML Type

Controls the motion of a character. More...

Import Statement: | `import QtQuick3D.Physics`
Since: | Qt 6.4
Inherits: | PhysicsBody

- List of all members, including inherited members

## Properties

- collisions : Collisions
- enableShapeHitCallback : bool `(since 6.6)`
- gravity : vector3d
- midAirControl : bool
- movement : vector3d

## Signals

- shapeHit(PhysicsNode *body, vector3D position, vector3D impulse, vector3D normal) `(since 6.6)`

## Methods

- void teleport(vector3d position)

## Detailed Description

The CharacterController type controls the motion of a character.

A character is an entity that moves under external control, but is still constrained by physical barriers and (optionally) subject to gravity. This is in contrast to dynamic rigid bodies which are either completely controlled by the physics simulation (for non-kinematic bodies); or move exactly where placed, regardless of barriers (for kinematic objects).

To control the motion of a character controller, set movement to the desired velocity.

For a first-person view, the camera is typically placed inside a character controller.

Note: collisionShapes must be set to a single CapsuleShape. No other shapes are supported.

Note: The character controller is able to scale obstacles that are lower than one fourth of the capsule shape's height.

See also Qt Quick 3D Physics Shapes, Bodies and Joints.

## Property Documentation

### collisions : Collisions `[read-only]`

This property holds the current collision state of the character. It is either `None` for no collision, or an OR combination of `Side`, `Up`, and `Down`:

Constant | Description
--- | ---
`CharacterController.None` | The character is not touching anything. If gravity is non-null, this means that the character is in free fall.
`CharacterController.Side` | The character is touching something on its side.
`CharacterController.Up` | The character is touching something above it.
`CharacterController.Down` | The character is touching something below it. In standard gravity, this means that the character is on the ground. Note: The directions are defined relative to standard gravity: `Up` is always along the positive y-axis, regardless of the value of CharacterController.gravity or PhysicsWorld.gravity

### enableShapeHitCallback : bool `[since 6.6]`

This property enables/disables the CharacterController::shapeHit callback for this character controller.

Default value: `false`

This property was introduced in Qt 6.6.

### gravity : vector3d

This property defines the gravitational acceleration that applies to the character. For a character that walks on the ground, it should typically be set to PhysicsWorld.gravity. A floating character that has movement controls in three dimensions will normally have gravity `(0, 0, 0)`.

Default value: `(0, 0, 0)`.

### midAirControl : bool

This property defines whether the movement property has effect when the character is in free fall. This is only relevant if gravity in not null. A value of `true` means that the character will change direction in mid-air when `movement` changes. A value of `false` means that the character will continue on its current trajectory until it hits another object.

Default value: `true`

### movement : vector3d

This property defines the controlled motion of the character. This is the velocity the character would move in the absence of gravity and without interacting with other physics objects.

This property does not reflect the actual velocity of the character. If the character is stuck against terrain, the character can move slower than the speed defined by `movement`. Conversely, if the character is in free fall, it may move much faster.

Default value: `(0, 0, 0)`

## Signal Documentation

### `[since 6.6]` shapeHit(PhysicsNode *body, vector3D position, vector3D impulse, vector3D normal)

This signal is emitted when movement has been called and it would result in a collision with a DynamicRigidBody or a StaticRigidBody and enableShapeHitCallback is set to `true`. The parameters body, position, impulse and normal contain the body, position, impulse force and normal for the contact point.

Note: The corresponding handler is `onShapeHit`.

This signal was introduced in Qt 6.6.

## Method Documentation

### void teleport(vector3d position)

Immediately move the character to position without checking for collisions. The caller is responsible for avoiding overlap with static objects.