跳到主要内容

KinematicBody2D

继承

PhysicsBody2D

简要描述

运动体2D节点。

描述

运动主体是特殊类型的主体,应由用户控制。

模拟运动:当这些物体从代码或AnimationPlayer[AnimationPlayer.playback_process_mode]设置为“ physics”)手动移动时,物理学将自动计算它们的估计

运动字符: KinematicBody2D还具有在执行碰撞测试时用于移动对象的API(move_and_collidemove_and_slide方法)。

成员

类型属性名默认值
floatcollision/safe_margin0.08
boolmotion/sync_to_physicsfalse

方法

返回值类型方法名称
Vector2get_floor_normal() const
Vector2get_floor_velocity() const
KinematicCollision2Dget_slide_collision(slide_idx: int)
intget_slide_count() const
boolis_on_ceiling() const
boolis_on_floor() const
boolis_on_wall() const
KinematicCollision2Dmove_and_collide(rel_vec: Vector2, infinite_inertia: bool = true, exclude_raycast_shapes: bool = true, test_only: bool = false)
Vector2move_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)
Vector2move_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)
booltest_move(from: Transform2D, rel_vec: Vector2, infinite_inertia: bool = true)

常量

成员说明

  • float collision/safe_margin
Default0.08
setterset_safe_margin(value)
getterget_safe_margin
  • bool motion/sync_to_physics
Defaultfalse
setterset_sync_to_physics(value)
getteris_sync_to_physics_enabled

方法说明

  • get_floor_normal get_floor_normal() const

返回最后一个碰撞点的地板表面法线。值在调用move_and_slideis_on_floor 返回true时有效。


  • get_floor_velocity get_floor_velocity() const

返回地板在最后一个碰撞点的线速度。值在调用move_and_slideis_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_onlytrue,则主体不会移动,但会提供可能的碰撞信息。


  • 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_slopetrue,则当您在linear_velocity中包含重力并且身体静止不动时,身体将不会在斜坡上滑动。

如果物体碰撞,它将在停止之前最多改变max_slides次。

floor_max_angle是仍将坡度视为地板(或天花板)而不是墙壁的最大角度(以弧度为单位)。

如果infinite_inertiatrue,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。