KinematicBody2D
继承
简要描述
运动体2D节点。
描述
运动主体是特殊类型的主体,应由用户控制。
模拟运动:当这些物体从代码或AnimationPlayer([AnimationPlayer.playback_process_mode]设置为“ physics”)手动移动时,物理学将自动计算它们的估计
运动字符: KinematicBody2D还具有在执行碰撞测试时用于移动对象的API(move_and_collide和move_and_slide方法)。
成员
类型 | 属性名 | 默认值 |
---|---|---|
float | collision/safe_margin | 0.08 |
bool | motion/sync_to_physics | false |
方法
返回值类型 | 方法名称 |
---|---|
Vector2 | get_floor_normal() const |
Vector2 | get_floor_velocity() const |
KinematicCollision2D | get_slide_collision(slide_idx: int) |
int | get_slide_count() const |
bool | is_on_ceiling() const |
bool | is_on_floor() const |
bool | is_on_wall() const |
KinematicCollision2D | move_and_collide(rel_vec: Vector2, infinite_inertia: bool = true, exclude_raycast_shapes: bool = true, test_only: bool = false) |
Vector2 | move_and_slide(linear_velocity: Vector2, up_direction: Vector2 = Vector2( 0, 0 ), stop_on_slope: bool = false, max_slides: int = 4, floor_max_angle: float = 0.785398, infinite_inertia: bool = true) |
Vector2 | move_and_slide_with_snap(linear_velocity: Vector2, snap: Vector2, up_direction: Vector2 = Vector2( 0, 0 ), stop_on_slope: bool = false, max_slides: int = 4, floor_max_angle: float = 0.785398, infinite_inertia: bool = true) |
bool | test_move(from: Transform2D, rel_vec: Vector2, infinite_inertia: bool = true) |
常量
成员说明
- float collision/safe_margin
Default | 0.08 |
---|---|
setter | set_safe_margin(value) |
getter | get_safe_margin |
- bool motion/sync_to_physics
Default | false |
---|---|
setter | set_sync_to_physics(value) |
getter | is_sync_to_physics_enabled |
方法说明
- get_floor_normal get_floor_normal() const
返回最后一个碰撞点的地板表面法线。值在调用move_and_slide 或is_on_floor 返回true时有效。
- get_floor_velocity get_floor_velocity() const
返回地板在最后一个碰撞点的线速度。值在调用move_and_slide 或is_on_floor 返回true时有效。
- get_slide_collision get_slide_collision(slide_idx: int)
返回KinematicCollision2D,其中包含有关在上一次move_and_slide调用期间发生的碰撞的信息。
Example usage:
for i in get_slide_count():
var collision = get_slide_collision(i)
print("Collided with: ", collision.collider.name)
- get_slide_count get_slide_count() const
返回上一次调用move_and_slide时身体碰撞和改变方向的次数。
- is_on_ceiling is_on_ceiling() const
如果主体在天花板上,则返回true
。
- is_on_floor is_on_floor() const
如果主体在地板上,则返回true
。
- is_on_wall is_on_wall() const
如果主体在墙上,则返回true
。
- move_and_collide move_and_collide(rel_vec: Vector2, infinite_inertia: bool = true, exclude_raycast_shapes: bool = true, test_only: bool = false)
沿矢量rel_vec
移动主体。
如果test_only
为true
,则主体不会移动,但会提供可能的碰撞信息。
- move_and_slide move_and_slide(linear_velocity: Vector2, up_direction: Vector2 = Vector2( 0, 0 ), stop_on_slope: bool = false, max_slides: int = 4, floor_max_angle: float = 0.785398, infinite_inertia: bool = true)
沿向量移动身体。
此方法应在Node._physics_process(或Node._physics_process调用的方法)中使用,因为它会在计算中自动使用物理步骤的delta
值。
linear_velocity
是每秒的像素速度向量。
up_direction
是向上方向,用于确定什么是墙以及什么是地板或天花板。
如果stop_on_slope
为true
,则当您在linear_velocity
中包含重力并且身体静止不动时,身体将不会在斜坡上滑动。
如果物体碰撞,它将在停止之前最多改变max_slides
次。
floor_max_angle
是仍将坡度视为地板(或天花板)而不是墙壁的最大角度(以弧度为单位)。
如果infinite_inertia
为true
,body将能够推送RigidBody2D节点,但也不会检测到与它们的任何冲突。
返回linear_velocity
向量,如果发生滑动碰撞则旋转和/或缩放。
- move_and_slide_with_snap move_and_slide_with_snap(linear_velocity: Vector2, snap: Vector2, up_direction: Vector2 = Vector2( 0, 0 ), stop_on_slope: bool = false, max_slides: int = 4, floor_max_angle: float = 0.785398, infinite_inertia: bool = true)
移动身体,同时使其保持附着在斜坡上。
只要snap
向量与地面接触,物体就会保持附着在表面上。
- test_move test_move(from: Transform2D, rel_vec: Vector2, infinite_inertia: bool = true)
在不移动身体的情况下检查碰撞。虚拟的设置节点位置,缩放,旋转以便给定的Transform2D可以移动物体沿着向量rel_vec。