LookAtModifier3D

Hereda: SkeletonModifier3D < Node3D < Node < Object

El LookAtModifier3D rota un hueso para que mire a un objetivo.

Descripción

Este SkeletonModifier3D rota un hueso para que mire a un objetivo. Esto es útil para mover la cabeza de un personaje para que mire al jugador, rotar una torreta para que mire a un objetivo, o cualquier otro caso en el que quieras que un hueso rote hacia algo de forma rápida y sencilla.

Cuando se aplican múltiples LookAtModifier3Ds, el LookAtModifier3D asignado al hueso padre debe colocarse por encima del LookAtModifier3D asignado al hueso hijo en la lista para que los resultados del hueso hijo sean correctos.

Propiedades

int

bone

-1

String

bone_name

""

float

duration

0.0

EaseType

ease_type

0

BoneAxis

forward_axis

4

int

origin_bone

String

origin_bone_name

NodePath

origin_external_node

OriginFrom

origin_from

0

Vector3

origin_offset

Vector3(0, 0, 0)

float

origin_safe_margin

0.1

float

primary_damp_threshold

float

primary_limit_angle

float

primary_negative_damp_threshold

float

primary_negative_limit_angle

float

primary_positive_damp_threshold

float

primary_positive_limit_angle

Axis

primary_rotation_axis

1

bool

relative

true

float

secondary_damp_threshold

float

secondary_limit_angle

float

secondary_negative_damp_threshold

float

secondary_negative_limit_angle

float

secondary_positive_damp_threshold

float

secondary_positive_limit_angle

bool

symmetry_limitation

NodePath

target_node

NodePath("")

TransitionType

transition_type

0

bool

use_angle_limitation

false

bool

use_secondary_rotation

true

Métodos

float

get_interpolation_remaining() const

bool

is_interpolating() const

bool

is_target_within_limitation() const


Enumeraciones

enum OriginFrom: 🔗

OriginFrom ORIGIN_FROM_SELF = 0

La posición de reposo del hueso especificado en bone se utiliza como origen.

OriginFrom ORIGIN_FROM_SPECIFIC_BONE = 1

La posición global de la pose del hueso especificado en origin_bone se utiliza como origen.

Nota: Se recomienda que selecciones solo el hueso padre a menos que estés familiarizado con el proceso de procesamiento de huesos. La pose del hueso especificada en el momento en que se procesa el LookAtModifier3D se utiliza como referencia. En otras palabras, si especificas un hueso hijo y el LookAtModifier3D hace que el hueso hijo se mueva, el resultado y la dirección renderizados no coincidirán.

OriginFrom ORIGIN_FROM_EXTERNAL_NODE = 2

La posición global del Node3D especificado en origin_external_node se utiliza como origen.

Nota: Igual que ORIGIN_FROM_SPECIFIC_BONE, al especificar un BoneAttachment3D con un hueso hijo asignado, el resultado y la dirección renderizados no coincidirán.


Descripciones de Propiedades

int bone = -1 🔗

  • void set_bone(value: int)

  • int get_bone()

Índice del bone_name en el Skeleton3D padre.


String bone_name = "" 🔗

El nombre del hueso del Skeleton3D sobre el que operará la modificación.


float duration = 0.0 🔗

  • void set_duration(value: float)

  • float get_duration()

La duración de la interpolación basada en el tiempo. La interpolación se activa en los siguientes casos:

  • Cuando el nodo objetivo cambia

  • Cuando un eje se invierte debido a la limitación del ángulo

Nota: La inversión se produce cuando el objetivo está fuera de la limitación del ángulo y el eje de rotación secundario del vector de avance, calculado internamente, se invierte. Visualmente, se produce cuando el objetivo está fuera de la limitación del ángulo y cruza el plano del forward_axis y primary_rotation_axis.


EaseType ease_type = 0 🔗

El tipo de interpolación basada en el tiempo. Véase también EaseType.


BoneAxis forward_axis = 4 🔗

El eje delantero del hueso. Este SkeletonModifier3D modifica el hueso para que este eje apunte hacia el target_node.


int origin_bone 🔗

  • void set_origin_bone(value: int)

  • int get_origin_bone()

Índice del origin_bone_name en el Skeleton3D padre.


String origin_bone_name 🔗

  • void set_origin_bone_name(value: String)

  • String get_origin_bone_name()

Si origin_from es ORIGIN_FROM_SPECIFIC_BONE, la posición global de la pose del hueso especificada para este se utiliza como origen.


NodePath origin_external_node 🔗

  • void set_origin_external_node(value: NodePath)

  • NodePath get_origin_external_node()

Si origin_from es ORIGIN_FROM_EXTERNAL_NODE, la posición global del Node3D especificado para este se utiliza como origen.


OriginFrom origin_from = 0 🔗

Este valor determina de qué origen se recupera para su uso en el cálculo del vector de avance.


Vector3 origin_offset = Vector3(0, 0, 0) 🔗

El desplazamiento del origen de la pose del hueso. Hacer coincidir los orígenes por desplazamiento es útil para los casos en los que varios huesos deben mirar siempre en la misma dirección, como los ojos.

Nota: Este valor indica la posición local del objeto establecido en origin_from.


float origin_safe_margin = 0.1 🔗

  • void set_origin_safe_margin(value: float)

  • float get_origin_safe_margin()

Si el objetivo pasa demasiado cerca del origen que este valor, se utiliza la interpolación basada en el tiempo, incluso si el objetivo está dentro de las limitaciones angulares, para evitar que la velocidad angular sea demasiado alta.


float primary_damp_threshold 🔗

  • void set_primary_damp_threshold(value: float)

  • float get_primary_damp_threshold()

El umbral para empezar a amortiguar para primary_limit_angle. Proporciona una interpolación no lineal (b-spline), deja que sienta más resistencia cuanto más gire hacia el límite del borde. Esto es útil para simular los límites del movimiento humano.

Si es 1.0, no se realiza ninguna amortiguación. Si es 0.0, la amortiguación se realiza siempre.


float primary_limit_angle 🔗

  • void set_primary_limit_angle(value: float)

  • float get_primary_limit_angle()

El ángulo límite de la rotación primaria cuando symmetry_limitation es true, en radianes.


float primary_negative_damp_threshold 🔗

  • void set_primary_negative_damp_threshold(value: float)

  • float get_primary_negative_damp_threshold()

El umbral para empezar a amortiguar para primary_negative_limit_angle.


float primary_negative_limit_angle 🔗

  • void set_primary_negative_limit_angle(value: float)

  • float get_primary_negative_limit_angle()

El ángulo límite del lado negativo de la rotación primaria cuando symmetry_limitation es false, en radianes.


float primary_positive_damp_threshold 🔗

  • void set_primary_positive_damp_threshold(value: float)

  • float get_primary_positive_damp_threshold()

El umbral para empezar a amortiguar para primary_positive_limit_angle.


float primary_positive_limit_angle 🔗

  • void set_primary_positive_limit_angle(value: float)

  • float get_primary_positive_limit_angle()

El ángulo límite del lado positivo de la rotación primaria cuando symmetry_limitation es false, en radianes.


Axis primary_rotation_axis = 1 🔗

  • void set_primary_rotation_axis(value: Axis)

  • Axis get_primary_rotation_axis()

El eje de la primera rotación. Este SkeletonModifier3D funciona componiendo la rotación mediante ángulos de Euler para evitar rotar el forward_axis.


bool relative = true 🔗

  • void set_relative(value: bool)

  • bool is_relative()

The relative option. If true, the rotation is applied relative to the pose. If false, the rotation is applied relative to the rest. It means to replace the current pose with the LookAtModifier3D's result.


float secondary_damp_threshold 🔗

  • void set_secondary_damp_threshold(value: float)

  • float get_secondary_damp_threshold()

El umbral para empezar a amortiguar para secondary_limit_angle.


float secondary_limit_angle 🔗

  • void set_secondary_limit_angle(value: float)

  • float get_secondary_limit_angle()

The limit angle of the secondary rotation when symmetry_limitation is true, in radians.


float secondary_negative_damp_threshold 🔗

  • void set_secondary_negative_damp_threshold(value: float)

  • float get_secondary_negative_damp_threshold()

El umbral para empezar a amortiguar para secondary_negative_limit_angle.


float secondary_negative_limit_angle 🔗

  • void set_secondary_negative_limit_angle(value: float)

  • float get_secondary_negative_limit_angle()

The limit angle of negative side of the secondary rotation when symmetry_limitation is false, in radians.


float secondary_positive_damp_threshold 🔗

  • void set_secondary_positive_damp_threshold(value: float)

  • float get_secondary_positive_damp_threshold()

El umbral para empezar a amortiguar para secondary_positive_limit_angle.


float secondary_positive_limit_angle 🔗

  • void set_secondary_positive_limit_angle(value: float)

  • float get_secondary_positive_limit_angle()

The limit angle of positive side of the secondary rotation when symmetry_limitation is false, in radians.


bool symmetry_limitation 🔗

  • void set_symmetry_limitation(value: bool)

  • bool is_limitation_symmetry()

Si es true, las limitaciones se extienden desde el hueso simétricamente.

Si es false, la limitación se puede especificar por separado para cada lado del reposo del hueso.


NodePath target_node = NodePath("") 🔗

El NodePath al nodo que es el objetivo para la modificación de la mirada. Este nodo es al que la modificación rotará el hueso.


TransitionType transition_type = 0 🔗

El tipo de transición de la interpolación basada en el tiempo. Véase también TransitionType.


bool use_angle_limitation = false 🔗

  • void set_use_angle_limitation(value: bool)

  • bool is_using_angle_limitation()

Si es true, limita la cantidad de rotación. Por ejemplo, esto ayuda a evitar que el cuello de un personaje rote 360 grados.

Nota: Al igual que con la mezcla de AnimationTree, se proporciona una interpolación que favorece a Skeleton3D.get_bone_rest(). Esto significa que la interpolación no selecciona el camino más corto en algunos casos.

Nota: Algunos valores para transition_type (como Tween.TRANS_BACK, Tween.TRANS_ELASTIC y Tween.TRANS_SPRING) pueden exceder las limitaciones. Si la interpolación se produce mientras se sobrepasan las limitaciones, es posible que el resultado no respete el reposo del hueso.


bool use_secondary_rotation = true 🔗

  • void set_use_secondary_rotation(value: bool)

  • bool is_using_secondary_rotation()

Si es true, proporciona rotación en dos ejes.


Descripciones de Métodos

float get_interpolation_remaining() const 🔗

Devuelve los segundos restantes de la interpolación basada en el tiempo.


bool is_interpolating() const 🔗

Devuelve true si la interpolación basada en el tiempo está en ejecución. Si es true, es equivalente a que get_interpolation_remaining() devuelva 0.0.

Esto es útil para determinar si un LookAtModifier3D puede ser eliminado de forma segura.


bool is_target_within_limitation() const 🔗

Devuelve si el objetivo está dentro de las limitaciones de ángulo. Es útil para sobrescribir el target_node cuando el objetivo está fuera de las limitaciones de ángulo.

Nota: El valor se actualiza después de SkeletonModifier3D._process_modification(). Para recuperar este valor correctamente, recomendamos utilizar la señal SkeletonModifier3D.modification_processed.