本页内容

CharacterController QML Type

控制角色的动作。更多...

Import Statement: import QtQuick3D.Physics
Since: Qt 6.4
Inherits:

PhysicsBody

属性

信号

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

方法

详细说明

CharacterController 类型用于控制角色的运动。

角色是一种在外部控制下移动的实体,但仍受物理障碍物的限制,并(可选)受重力影响。这与dynamic rigid bodies 不同,后者要么完全由物理模拟控制(针对非运动学物体);要么无论是否存在障碍物,都精确移动到放置的位置(针对运动学物体)。

要控制角色控制器的运动,请将movement 设置为所需的速度。

对于第一人称视角,摄像机通常放置在角色控制器内部。

注意: collisionShapes 必须设置为单个“CapsuleShape ”形状。不支持其他形状。

注意: 角色控制器 能够跨越高度低于胶囊形状高度四分之一的障碍物。

另请参阅 Qt Quick 3D 中的“物理形状、物体和关节”。

属性文档

collisions : Collisions [read-only]

该属性保存角色的当前碰撞状态。其取值为None (表示无碰撞),或是Side 、Up 和Down 的按“或”运算组合:

常量描述
CharacterController.None角色未与任何物体接触。如果重力不为空,则表示角色处于自由落体状态。
CharacterController.Side角色侧面接触到某物体。
CharacterController.Up角色正在接触其上方的物体。
CharacterController.Down角色正接触其下方的物体。在标准重力下,这意味着角色位于地面上。

注意:方向是 相对于标准重力定义的:Up 始终沿y轴正方向,无论CharacterController.gravity 的值是多少,或者PhysicsWorld.gravity

enableShapeHitCallback : bool [since 6.6]

此属性用于启用或禁用该角色控制器的CharacterController::shapeHit 回调函数。

默认值:false

该属性自 Qt 6.6 起引入。

gravity : vector3d

该属性定义了作用于角色的重力加速度。对于在地面上行走的角色,通常应将其设置为PhysicsWorld.gravity 。对于具有三维移动控制的漂浮角色,重力通常应设置为(0, 0, 0) 。

默认值:(0, 0, 0) 。

midAirControl : bool

该属性定义了当角色处于自由落体状态时,movement 属性是否生效。仅当gravity 不为空时,此属性才起作用。若值为true ,则表示当movement 发生变化时,角色会在空中改变方向;若值为false ,则表示角色将沿当前轨迹继续运动,直到撞上其他物体。

默认值:true

movement : vector3d

该属性定义了角色的受控运动。这是角色在无重力且不与其他物理对象相互作用时所具有的运动速度。

该属性并不反映角色的实际速度。如果角色被地形卡住,其移动速度可能会低于由movement 定义的速度。反之,如果角色处于自由落体状态,其移动速度可能会快得多。

默认值:(0, 0, 0)

信号文档

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

当调用movement 时,如果会与DynamicRigidBody 或StaticRigidBody 发生碰撞,且enableShapeHitCallback 被设置为true ,则会触发此信号。参数body 、position 、impulse 和normal 分别包含接触点的物体、位置、冲量力和法向量。

注意: 相应的处理函数 为onShapeHit 。

该信号于 Qt 6.6 中引入。

方法文档

void teleport(vector3d position)

立即将角色移动到position ,无需检查碰撞。调用方有责任避免与静态对象发生重叠。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.