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.
Paso 2: Adición de un ComponentModeDelegate de
Para añadir esta característica al componente Point Light (Luz puntual), debe actualizar el componente para que pueda detectar la intención de comenzar a
editar un componente y administrar la creación de un Modo de componente. Para hacerlo,
añada un nuevo tipo denominado ComponentModeDelegate
al componente existente.
Para añadir unComponentModeDelegate
-
Vaya al archivo
EditorPointLightComponent.h
y abra el archivo en un editor de texto. -
Añada el
ComponentModeDelegate
.ejemplo EditorPointLightComponent.h
En este ejemplo, hay un
#include
paraComponentModeDelegate.h
, que es donde se añade el archivo como miembro. La declaraciónusing
reduce la longitud de la definición dem_componentDelegate
. El archivo actualizado también proporciona las funciones de miembrosActivate
yDeactivate
para el componente. -
Guarde el archivo.
Ahora que ha actualizado el archivo EditorPointLightComponent.h
, debe realizar cambios en el archivo de implementación EditorPointLightComponent.cpp
.
Para actualizar elEditorPointLightComponent.cpp
-
Abra el archivo
EditorPointLightComponent.cpp
en un editor de texto. -
Añada un
#include
para el Modo de componente no escrito y comente el cambio. Esto se convierte en el archivoEditorPointLightComponentMode.h
.// #include "EditorPointLightComponentMode.h"
-
Serialice el miembro
m_componentModeDelegate
para exponerlo alEditContext
.->Field("ComponentMode", &EditorPointLightComponent::m_componentModeDelegate)
-
Introduzca los siguientes cambios para que
ComponentModeDelegate
aparezca en el Entity Inspector. Este cambio agrega el botón Edit (Editar) al componente Point Light (Luz puntual).->DataElement(AZ::Edit::UIHandlers::Default, &EditorPointLightComponent::m_componentModeDelegate, "Component Mode", "Point Light Component Mode") ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly)
sugerencia El
Attribute
garantiza que el botón Edit (Editar) aparezca sin estar anidado dentro de la clase/estructuraComponentModeDelegate
. -
Dentro de la llamada
Activate
, añada el siguiente código.m_componentModeDelegate.ConnectWithSingleComponentMode < EditorPointLightComponent, /*
EditorPointLightComponentMode
*/>( AZ::EntityComponentIdPair(GetEntityId(), GetId()), nullptr);-
La función auxiliar
ConnectWithSingleComponentMode
gestiona el caso más común de añadir un Modo de componente. Esta llamada envuelve una API más compleja en la que se pueden activar al mismo tiempo varios Modos de componente.Por ejemplo, consulte el archivo
EditorTubeShapeComponent.h
. -
Especifique el tipo de componente y el propio Modo de componente.
nota Los parámetros de la plantilla generalizan la conexión y la creación de una instancia de Modos de componente. Para obtener más información, consulte
CreateComponentModeBuilder.h
y su funciónAddComponentModes
. -
Especifique el
EntityId
al que se ha adjuntado el componente y elComponentId
.nota Es posible (aunque no se utiliza a menudo) dirigirse a un EBus no solo por el
EntityId
sino por el parEntityId
yComponentId
. No se garantiza que unComponentId
sea único por sí mismo, pero cuando se combina con unEntityId
, puede dirigirse a un componente específico asociado a una entidad. Esto resulta útil cuando tiene varios componentes del mismo tipo asociados a una única entidad. -
El argumento final es un
nullptr
, que es unEditorComponentSelectionRequestBus::Handler
. Para utilizar este controlador,EditorComponent
debe implementarEditorComponentSelectionRequestsBus
. Si la EBus se ha implementado, puede pasar'this'
aquí, pero dado que aún no la ha implementado, escribanullptr
por ahora.Estos cambios le permiten hacer doble clic en en la ventanilla para seleccionar un componente. Implemente el
EditorComponentSelectionRequestBus
en Paso 5: Gestionar selección en la ventanilla.Para ver ejemplos, consulte los archivos
EditorSplineComponent.h
yEditorBaseShapeComponent.h
.
-
-
Escriba el siguiente código para desconectar el
ComponentModeDelegate
cuando elEditorComponent
se desactiva.m_componentModeDelegate.Disconnect();
Este cambio garantiza que el
ComponentModeDelegate
se desconecte de los distintos EBuses que están conectados a en la funciónActivate
.
ejemplo EditorPointLightComponent.cpp
El código debería tener el siguiente aspecto.