Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

SpringArm3D

继承: Node3D < Node < Object

能够动态地将子节点朝碰撞点移动的 3D 射线投射。

描述

SpringArm3D 会朝它的 Z 轴投射射线或形状,并将所有直接子节点朝碰撞点移动,可以保留一定的边距。可用于第三人称相机,让其在狭窄空间中朝玩家移动(你可能需要在 SpringArm3D 的碰撞检查中排除玩家的碰撞体)。

属性

int

collision_mask

1

float

margin

0.01

Shape3D

shape

float

spring_length

1.0

方法

void

add_excluded_object(RID: RID)

void

clear_excluded_objects()

float

get_hit_length()

bool

remove_excluded_object(RID: RID)


属性说明

int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

碰撞检测的目标层。更多信息请参阅文档中的《碰撞层与遮罩》


float margin = 0.01 🔗

  • void set_margin(value: float)

  • float get_margin()

进行碰撞检测时,会给出 SpringArm3D 的一个候选长度。

然后将边距减去该长度,并将该平移应用于该 SpringArm3D 的子对象。

当 SpringArm3D 有一个 Camera3D 作为子节点时,该边距很有用:如果没有边距,该 Camera3D 将被放置在准确的碰撞点上;而有边距时,该 Camera3D 将被放置在靠近碰撞点的地方。


Shape3D shape 🔗

用于该 SpringArm3D 的 Shape3D

当该形状被设置后,SpringArm3D 将在其 z 轴上投射该 Shape3D,而不是执行一个射线投射。


float spring_length = 1.0 🔗

  • void set_length(value: float)

  • float get_length()

SpringArm3D 的最大范围。这用作内部使用的射线和形状投射的长度,以计算 SpringArm3D 子节点的所需位置。

要了解有关如何执行形状投射或射线投射的更多信息,请参阅 PhysicsDirectSpaceState3D 文档。


方法说明

void add_excluded_object(RID: RID) 🔗

将具有给定 RIDPhysicsBody3D 对象,添加到从碰撞检查中排除的 PhysicsBody3D 对象列表中。


void clear_excluded_objects() 🔗

清空碰撞检测排除 PhysicsBody3D 对象的列表。


float get_hit_length() 🔗

返回弹簧臂的当前长度。


bool remove_excluded_object(RID: RID) 🔗

从碰撞检测排除 PhysicsBody3D 对象的列表中移除给定的 RID