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
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Métodos
get_interpolation_remaining() const |
|
is_interpolating() const |
|
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
Índice del bone_name en el Skeleton3D padre.
El nombre del hueso del Skeleton3D sobre el que operará la modificación.
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.
El tipo de interpolación basada en el tiempo. Véase también EaseType.
El eje delantero del hueso. Este SkeletonModifier3D modifica el hueso para que este eje apunte hacia el target_node.
Índice del origin_bone_name en el Skeleton3D padre.
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 🔗
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 🔗
void set_origin_from(value: OriginFrom)
OriginFrom get_origin_from()
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 🔗
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 🔗
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.
El ángulo límite de la rotación primaria cuando symmetry_limitation es true, en radianes.
float primary_negative_damp_threshold 🔗
El umbral para empezar a amortiguar para primary_negative_limit_angle.
float 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 🔗
El umbral para empezar a amortiguar para primary_positive_limit_angle.
float 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 🔗
El eje de la primera rotación. Este SkeletonModifier3D funciona componiendo la rotación mediante ángulos de Euler para evitar rotar el forward_axis.
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 🔗
El umbral para empezar a amortiguar para 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 🔗
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 🔗
The limit angle of positive side of the secondary rotation when symmetry_limitation is false, in radians.
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 🔗
void set_transition_type(value: TransitionType)
TransitionType get_transition_type()
El tipo de transición de la interpolación basada en el tiempo. Véase también TransitionType.
bool use_angle_limitation = false 🔗
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 🔗
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.