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.
Checking the stable version of the documentation...
PhysicalBone3D
Eredita: PhysicsBody3D < CollisionObject3D < Node3D < Node < Object
Un corpo fisico utilizzato per far reagire le ossa in uno Skeleton3D alla fisica.
Descrizione
Il nodo PhysicalBone3D è un corpo fisico che può essere utilizzato per far reagire le ossa in uno Skeleton3D alla fisica.
Nota: Per rilevare le ossa fisiche con i raycast, la proprietà SkeletonModifier3D.active del PhysicalBoneSimulator3D genitore deve essere true e l'osso dello Skeleton3D deve essere assegnato correttamente a PhysicalBone3D; ciò significa che get_bone_id() dovrebbe restituire un ID valido (>= 0).
Tutorial
Proprietà
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Metodi
void |
_integrate_forces(state: PhysicsDirectBodyState3D) virtual |
void |
apply_central_impulse(impulse: Vector3) |
void |
apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0)) |
get_bone_id() const |
|
Enumerazioni
enum DampMode: 🔗
DampMode DAMP_MODE_COMBINE = 0
In questa modalità, il valore di smorzamento del corpo è aggiunto a qualsiasi valore impostato nelle aree o al valore predefinito.
DampMode DAMP_MODE_REPLACE = 1
In questa modalità, il valore di smorzamento del corpo sostituisce qualsiasi valore impostato nelle aree o il valore predefinito.
enum JointType: 🔗
JointType JOINT_TYPE_NONE = 0
Nessuna articolazione è applicata al PhysicsBone3D.
JointType JOINT_TYPE_PIN = 1
Un giunto a perno viene applicato al PhysicsBone3D.
JointType JOINT_TYPE_CONE = 2
Un'articolazione conica è applicata al PhysicsBone3D.
JointType JOINT_TYPE_HINGE = 3
Un giunto a cerniera viene applicato al PhysicsBone3D.
JointType JOINT_TYPE_SLIDER = 4
Un'articolazione scorrevole è applicata al PhysicsBone3D.
JointType JOINT_TYPE_6DOF = 5
Un giunto a 6 gradi di libertà viene applicato al PhysicsBone3D.
Descrizioni delle proprietà
Smorza la rotazione del corpo. Come predefinito, il corpo utilizzerà impostazione del progetto ProjectSettings.physics/3d/default_angular_damp, o un valore sostitutivo impostato da un'Area3D in cui si trova il corpo. A seconda di angular_damp_mode, è possibile impostare angular_damp in modo che sia aggiunto o sostituito al valore di smorzamento del corpo.
Vedi ProjectSettings.physics/3d/default_angular_damp per ulteriori dettagli sullo smorzamento.
DampMode angular_damp_mode = 0 🔗
Definisce come angular_damp è applicato.
Vector3 angular_velocity = Vector3(0, 0, 0) 🔗
Velocità di rotazione del PhysicalBone3D in radianti al secondo.
Transform3D body_offset = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
void set_body_offset(value: Transform3D)
Transform3D get_body_offset()
Imposta la trasformazione del corpo.
Il rimbalzo del corpo. I valori variano da 0 (nessun rimbalzo) a 1 (rimbalzo totale).
Nota: Anche con bounce impostato su 1.0, parte dell'energia sarà persa nel tempo a causa dello smorzamento lineare e angolare. Per avere un PhysicalBone3D che conservi tutta la sua energia nel tempo, imposta bounce su 1.0, linear_damp_mode su DAMP_MODE_REPLACE, linear_damp su 0.0, angular_damp_mode su DAMP_MODE_REPLACE e angular_damp su 0.0.
Se true, il corpo viene disattivato quando non c'è movimento, quindi non parteciperà alla simulazione finché non sarà risvegliato da una forza esterna.
bool custom_integrator = false 🔗
Se true, l'integrazione predefinita delle forze (come gravità o smorzamento) sarà disabilitata per questo corpo. A parte la risposta alla collisione, il corpo si muoverà solo come determinato dal metodo _integrate_forces(), se tale metodo virtuale è sovrascritto.
Impostando questa proprietà sarà chiamato internamente il metodo PhysicsServer3D.body_set_omit_force_integration().
L'attrito del corpo, da 0 (senza attrito) a 1 (massimo attrito).
Questo è moltiplicato per ProjectSettings.physics/3d/default_gravity per produrre la gravità di questo corpo. Ad esempio, un valore di 1.0 applicherà la gravità normale, 2.0 applicherà il doppio della gravità e 0.5 applicherà metà della gravità per questo corpo.
Transform3D joint_offset = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
void set_joint_offset(value: Transform3D)
Transform3D get_joint_offset()
Imposta la trasformazione dell'articolazione.
Vector3 joint_rotation = Vector3(0, 0, 0) 🔗
Imposta la rotazione dell'articolazione in radianti.
Imposta il tipo di giunto.
Smorza il movimento del corpo. Come predefinito, il corpo utilizzerà ProjectSettings.physics/3d/default_linear_damp, o un valore sostitutivo impostato da un'Area3D in cui si trova il corpo. A seconda di linear_damp_mode, è possibile impostare linear_damp in modo che sia aggiunto o sostituito al valore di smorzamento del corpo.
Vedi ProjectSettings.physics/3d/default_linear_damp per ulteriori dettagli sullo smorzamento.
DampMode linear_damp_mode = 0 🔗
Definisce come linear_damp è applicato.
Vector3 linear_velocity = Vector3(0, 0, 0) 🔗
La velocità lineare del corpo in unità al secondo. Può essere usata sporadicamente, ma non impostarla ogni frame, perché la fisica potrebbe essere eseguita in un altro thread e funzionare a una granularità diversa. Usa _integrate_forces() come ciclo di processo per un controllo preciso dello stato del corpo.
La massa del corpo.
Descrizioni dei metodi
void _integrate_forces(state: PhysicsDirectBodyState3D) virtual 🔗
Chiamato durante l'elaborazione di fisica, consente di leggere e modificare in modo sicuro lo stato di simulazione per l'oggetto. Per impostazione predefinita, viene chiamato prima dell'integrazione predefinita delle forze, ma la proprietà custom_integrator consente di disabilitare l'integrazione delle forze predefinita e di eseguire un'integrazione delle forze completamente personalizzata per un corpo.
void apply_central_impulse(impulse: Vector3) 🔗
Applica un impulso direzionale senza influenzare la rotazione.
Un impulso è indipendente dal tempo! Applicare un impulso a ogni frame risulterebbe in una forza dipendente dal frame rate. Per questo motivo, dovrebbe essere utilizzato solo quando si simulano impatti singoli (altrimenti, utilizza le funzioni "_integrate_forces").
Ciò equivale a usare apply_impulse() al centro di massa del corpo.
void apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗
Applica un impulso posizionato al corpo.
Un impulso è indipendente dal tempo! Applicare un impulso a ogni frame risulterebbe in una forza dipendente dal frame rate. Per questo motivo, dovrebbe essere utilizzato solo quando si simulano impatti singoli (altrimenti, utilizza le funzioni "_integrate_forces").
position è lo scostamento dall'origine del PhysicsBone3D in coordinate globali.
Restituisce l'identificatore unico del PhysicsBone3D.
Restituisce true se al PhysicsBone3D è consentito simulare la fisica.
bool is_simulating_physics() 🔗
Restituisce true se il PhysicsBone3D sta attualmente simulando la fisica.