IKControl
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
IKControl instancias generan poses de animación procedural utilizando Kinemática inversa (IK).Te permiten hacer que los personajes respondan de manera realista a su entorno, ambiente.
Por ejemplo, puedes hacer que un personaje ponga la mano en una manija de puerta exactamente, y el personaje lo hará independientemente de su posición.Los controles de IK proporcionan la ventaja de tener que crear muchas menos animaciones para tu juego mientras le das a tu experiencia un aspecto más realista y pulido.
IKControls debe ser un hijo de un Humanoid o AnimationController con un Animator y tener todas sus propiedades requeridas establecidas correctamente, de lo contrario no tienen ningún efecto.Las propiedades requeridas son Type , EndEffector , Target , ChainRoot .Tan pronto como se establecer, el IkControl modifica la postura de tu personaje según lo especifiques.El siguiente ejemplo de código muestra cómo configurar tu primera IKControl y comenzar a crear animaciones más realistas para tu juego.
Puedes usar IKControls para crear un personaje:
- Gira su cabeza y torso para mirar un punto de interés en el mundo.
- Modifica sus posiciones de pies para responder al terreno dinámico. Ajusta sus piernas y pies para colocarlos de acuerdo con el terreno con rocas y laderas.
- Mantén una arma y coloca sus manos apropiadamente en el mango sin necesidad de crear animaciones para cada arma en el juego.
- Apunta a un punto en el mundo, para que la punta del arma apunte exactamente a lo que quieres disparar. Especialmente útil en shooters de tercera persona.
- Pon sus manos en el volante de un automóvil y síguelo cuando gira.
- ¡Mucho más!
IKControl anulará la animación para todas las partes entre el ChainRoot y el EndEffector .Puedes activar/desactivarlo usando Enabled o cambiar cuánto tienen un efecto sobre la animación subyacente usando el Weight .Tenga cuidado: si no configura correctamente su IKControls, ¡podría generar poses malas e irrealistas!
Muestras de código
This sample shows the basic setup for an IKControl that moves a character's left arm to reach for a point in the world.
local character = script.Parent.Character
local humanoid = character.Humanoid
local root = character.HumanoidRootPart
-- Create a new attachment to use as the IKControl.Target
local target = Instance.new("Attachment")
target.CFrame = CFrame.new(-1, 0, -1)
target.Parent = root
local ikControl = Instance.new("IKControl")
ikControl.Type = Enum.IKControlType.Position
ikControl.EndEffector = character.LeftHand
ikControl.ChainRoot = character.LeftUpperArm
ikControl.Target = target
ikControl.Parent = humanoid
Resumen
Propiedades
La última parte en la que estás interesado en mover tu personaje.Por ejemplo, el brazo superior.Debe ser un ancestro de EndEffector y ser un BasePart o un Bone en tu personaje.
Alterna el control en y desactivado. Verdadero por defecto.
La parte que estás interesado en mover para llegar al Target .Por ejemplo, la mano de tu personaje.Debe ser un descendiente de ChainRoot y ser un BasePart o un Bone en tu personaje.
Un desplazamiento adicional aplicado en la parte superior del EndEffector en su espacio local para cambiar a dónde se mueve.
Un desplazamiento adicional aplicado sobre el Target para cambiar dónde se mueve el EndEffector.
Una instancia opcional que determina hacia qué lado se dobla la cadena. Puedes usar esto para especificar hacia qué lado se dobla un codillo o una rodilla.
Specifica el orden en el que se resuelven los controles. Los valores más altos tienen mayor prioridad.
Specifica el número promedio de segundos que se tarda en que el EndEffector llegue suavemente al Target.
El objeto al que el EndEffector llega o apunta.Puede ser cualquier cosa que tenga una posición en el mundo, como BasePart , Attachment , Bone o Motor6D .
Specifica cómo el solucionador satisface este control.
Specifica el peso del objetivo de control de IK. Debe estar en el rango [0, 1].
Métodos
Propiedades
ChainRoot
Al especificar un ChainRoot y un EndEffector , le instruyes al IKControl que está permitido mover y rotar todas las piezas entre las dos para mover el EndEffector a la Target .Por ejemplo, si especificas la mano izquierda como EndEffector y el brazo superior izquierdo como ChainRoot, el control mueve 3 partes: la mano izquierda, el brazo inferior izquierdo y el brazo superior izquierdo.Evite establecer ChainRoot como la raíz real del personaje porque produce resultados poco realistas.
Enabled
Esta propiedad le permite alternar el control de IK en y apagado.Está activado por defecto.Cuando Enabled es falso, el control de IK está desactivado y no se resuelve por el solucionador de física PGSsubyacente.
EndEffector
La EndEffector describe la última parte de la cadena de tu personaje que quieres afectar.Por ejemplo, podría ser la mano cuando quieras mover todo el brazo para llegar a un punto.Puede ser un BasePart en un personaje, que tiene un Motor6D como hijo, un Motor6D directamente, un Bone o un Attachment .El pivote de la selección EndEffector se mueve al Target , por lo que puedes usar Attachments para modificar qué punto de un BasePart debe llegar al Target .
EndEffectorOffset
El desplazamiento del efecto final es un desplazamiento adicional de aplicado sobre el que produce el final usado para colocar el .Por defecto, es el marco de identidad CFrame, por lo que si no lo configuras, no tiene efecto y el EndEffector usa el Target``Datatype.CFrame directamente, lo que se especifica en el espacio local del EndEffector .
Alternativamente, puedes usar archivos adjuntos estableciendo un archivo adjunto como EndEffector , que lo mueve a la Target en lugar de las partes a las que está adjunto, obteniendo efectivamente el mismo resultado.
También puedes usar EndEffectorOffset para modificar qué eje de la EndEffector debe apuntar al Target al usar LookAt como Type .
Offset
El desplazamiento es un desplazamiento adicional aplicado sobre el que produce el final usado para colocar el .Es la identidad por defecto, por lo que si no la configuras, no tendrá efecto y el EndEffector usará el Target``Datatype.CFrame directamente.Puedes animarlo para crear animaciones procedimentales como escribir en un teclado.Es útil cuando el Target y el EndEffector no están alineados y necesitas corregirlo con una rotación o traducción adicional.
Pole
El Pole es un opcional Instance que te da control sobre cómo deben doblarse las partes intermedias en tu personaje.Puede ser cualquier cosa que tenga una posición en el mundo, como BasePart , Attachment , Bone , Motor6D .Por defecto es nil.Cuando lo especifiques, el solucionador subyacente hará que las piezas se doblen hacia él.Cuando sea nil, el solucionador intentará hacer que los codos y las rodillas se doblen apropiadamente en función de la extremidad del personaje.La extremidad será "Brazo" cuando selecciones como la izquierdaMano o derechaMano y como la correspondiente izquierdaSuperior del brazo o derechaSuperior del brazo , y será "Pierna" cuando selecciones como la izquierdaPierna o derechaPierna y como la correspondiente izquierdaSuperior de la pierna o derechaSuperior de la pierna .En todos los demás casos, si no especificas un eje, la cadena podría no doblarse como esperas.
Priority
Cuando varios controles están activos en un personaje, el orden en que se resuelven por el sistema subyacente afecta la postura final generada.Al cambiar este valor, especificas el orden en el que se satisfacen los controles.Los valores más altos tienen mayor prioridad, y los controles de mayor prioridad se resuelven más tarde porque su resultado podría anular el resultado anterior de otros controles.Si tienes múltiples controles de IK en un personaje y uno es más importante que el otro, especifica una prioridad más baja para él.Por defecto es 0, lo que significa que todos los controles tienen la misma prioridad.
SmoothTime
Este valor especifica el número promedio de segundos que toma el EndEffector para llegar al Target .El comportamiento es el de una resorte críticamente amortiguada, donde la velocidad de cambio es proporcional a la distancia al objetivo y no hay oscilaciones cuando se acerca al objetivo.Los valores más pequeños crean una convergencia más rápida, y los valores más grandes crean una convergencia más lenta.Un valor de 0 desactiva la suavización.El valor predeterminado es 0.05 para proporcionar una suavización muy leve que haga que el movimiento se sienta realista.
Target
El Target representa un punto ( CFrame ) en el mundo al que quieres que llegue tu EndEffector .El comportamiento exacto de alcanze se puede configurar a través de la propiedad Type, y se puede aplicar un adicional Offset encima de ella para modificarla.Si estableces un Target que se moverá por física o por un script, en cada marco el IKControl intentará satisfacerlo, actualizando automáticamente el punto de llegada.
Al cambiar el Type, puedes cambiar el comportamiento del control. Estas son las opciones disponibles:
- Transformar: es una restricción de 6 grados completos. Alinea el EndEffector``Datatype.CFrame con el de la Target .
- Posición: alinea la posición EndEffector con la de Target.
- Rotación: alinea la rotación EndEffector a la de la Target.
- LookAt: mueve y orienta toda la cadena para hacer un eje (por defecto, el eje delantero) en el punto EndEffector de una posición en el mundo especificada por Target.
Weight
Puedes controlar cuánto afecta un control dado la postura del personaje usando esta propiedad.Los valores deben estar en el rango [0, 1].0 significa ningún efecto, y 1 significa el efecto completo del control de IK.Los valores fuera de este rango se acortan.Variar suavemente este valor te permite mezclar dentro o fuera de un control específico para evitar movimientos bruscos.Es 1 por defecto.
El peso determina el factor de interpolación entre el efector final y el objetivo de IK.Establecer el peso en 0 no desactiva el control de IK porque otros factores, incluido el factor de suavización de SmoothTime y Pole, aún pueden cambiar la postura.Para deshabilitar realmente el control de IK, cambia la propiedad Enabled a falsa.