Personalización de objetos eMotion FX - Guía del usuario de Lumberyard

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Personalización de objetos eMotion FX

Esta función está enVista previaestá en versión y sujeto a cambios.

La API FX de eMotion admite el registro de tipos de objetos personalizados, incluidos nodos de máquina de estado, nodos de árbol de mezcla, transiciones y condiciones. Puede definir tipos de objetos personalizados en el código del juego o una gema personalizada. Esto le permite tener un control detallado del sistema de animación de Lumberyard.

Registro de objetos personalizados

Antes de registrar objetos personalizados, active elSystemComponentPara garantizar que el tiempo de ejecución de eMotion FX se inicializa correctamente. A continuación, utilice una llamada EBus al método EMotionFXRequestBus::Events::RegisterAnimGraphObjectType. Para garantizar que se active el tiempo de ejecución de eMotion FX, registre el nodo personalizado desde un componente que tenga una dependencia enEmotionFXAnimationService. No es necesario que añada una instancia manual del eMotion FXSystemComponentY llame aActivate; dependencias de componentes manejan estas tareas.

Para registrar el nodo personalizado

  1. En el código de proyecto de juego o gema personalizados, defina su subclase de EMotionFX::AnimGraphObject.

  2. Cree una subclase de AZ::Component.

  3. En el método GetDependentServices() del componente, añada la dependencia a EmotionFXAnimationService:

    dependent.push_back(AZ_CRC("EmotionFXAnimationService", 0x3f8a6369));
  4. En el método Activate() del componente, registre el tipo de nodo:

    EmotionFXAnimation::EMotionFXRequestBus::Broadcast( &EmotionFXAnimation::EMotionFXRequestBus::Events::RegisterAnimGraphNodeType, MyCustomNode::Create(nullptr) );

Implementación de subclases AnimGraphObject

AnimGraphObject es la clase base para todos los objetos en el gráfico de animación. El constructor de la clase base está protegida; en su lugar, los objetos se instancian con el método Create(). El sistema de animación de Lumberyard (eMotion FX) utiliza una instancia deAnimGraphObjectpara crear otras instancias llamando al métodoClone().

Cada subclase AnimGraphObject tiene un ID de tipo único que se utiliza para serializar un objeto y anular la serialización de un objeto de un archivo .animgraph. Debe utilizar una enumeración anónima pública con un miembro de TYPE_ID para declarar el ID de tipo de un objeto.

Cuando implemente una subclase AnimGraphObject, debe definir los siguientes métodos:

Método Descripción
uint32 GetBaseType() const Define el tipo base de un objeto. Existen tres tipos base: nodos, transiciones y condiciones.
const char* GetTypeString() const Define la versión de la cadena del nombre del tipo de objeto.
const char* GetPaletteName() const Define el nombre que se muestra en la interfaz de usuario.
AnimGraphObject::ECategory GetPaletteCategory() const Define el lugar de la paleta de la interfaz de usuario o la pestaña en el que debe aparecer el objeto.
AnimGraphObject* Clone(AnimGraph* animGraph) Crea una nueva instancia del mismo tipo de objeto, con el gráfico de animación del clon establecido en animGraph.
AnimGraphObjectData* CreateObjectData() Crea una nueva instancia de una instancia de AnimGraphObjectData. Representa datos que son exclusivos de cada tipo de nodo en una AnimGraphInstance.