Paso 4: Adición de accesos directos paraModo de componente - LumberyardGuía de usuario de

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 4: Adición de accesos directos paraModo de componente

En el procedimiento siguiente, cree accesos directos que son específicos del componente que está editando. Por ejemplo, si está editando un componente Spline y desea agregar accesos directos para trabajar con vértices, puede crear un acceso directo como Ctrl+D para duplicar un punto o Delete (Eliminar) para eliminarlo. Al añadir accesos directos, tenga en cuenta los siguientes cambios en el código:

  • EditorBaseComponentMode proporciona una función adicional que anular en su interfaz denominada PopulateActionsImpl.

    AZStd::vector<AzToolsFramework::ActionOverride> PopulateActionsImpl() override;
  • La función PopulateActionsImpl devuelve un vector de las acciones disponibles que se pueden llevar a cabo en Modo de componente. De forma predeterminada, siempre obtiene los siguientes accesos directos, que no puede cambiar:

    • Ctrl+S – Guardar

    • Ctrl+Z – Deshacer

    • Ctrl+Mayús+Z Rehacer–

    • Esc: – abandonarModo de componente

Para crear accesos directos para Modo de componente

  1. En el archivo EditorPointLightComponentMode.cpp, cree una estructura ActionOverride y utilice los métodos de cadena Set para mejorar la legibilidad. El elemento más importante de este cambio es un identificador único. El formato es una URL inversa: com.company.action.component.type: .

    static const AZ::Crc32 s_resetPointLight = AZ_CRC("com.amazon.action.pointlight.reset") ;
  2. Especifique el acceso directo que desee utilizar y, a continuación, escriba un nombre y una descripción de modo que el acceso directo aparezca en el menú Edit (Editar).

    .SetKeySequence(QKeySequence(Qt::Key_R)) .SetTitle("Reset") .SetTip("Reset all Point Light State") .SetEntityComponentIdPair(AZ::EntityComponentIdPair(GetEntityId(), GetComponentId()))
    nota

    Debe proporcionar el ID de componente y entidad al que corresponde esta acción y finalmente el evento o la propia devolución de llamada que ejecutar.

  3. Para asegurarse de que puede deshacer esta acción, cree un lote de deshacer y marque la entidad como sucia.

    // Ensure that we record undo command for reset AzToolsFramework::ScopedUndoBatch undoBatch("Reset Point Light"); AzToolsFramework::ScopedUndoBatch::MarkEntityDirty(entityId);
  4. Los estados actuales y posteriores de la entidad se comparan y, si no coinciden, se registra la acción deshacer. Siga la función undoBatch con una serie de llamadas para restablecer el estado del componente y, a continuación, actualice la posición de los manipuladores de modo que reflejen con precisión el estado del componente.

    /// Other set functions to return state to default... // refresh manipulators Refresh(); // ensure property grid values are refreshed AzToolsFramework::ToolsApplicationNotificationBus::Broadcast( &AzToolsFramework::ToolsApplicationNotificationBus::Events::InvalidatePropertyDisplay, AzToolsFramework::Refresh_Values);
  5. Guarde el archivo .

ejemplo EditorPointLightComponentMode.cpp

Puede añadir acciones adicionales como, por ejemplo, un acceso directo para restablecer todas las propiedades en el componente como las que se indican a continuación.

static const AZ::Crc32 s_resetPointLight = AZ_CRC("com.amazon.action.pointlight.reset") ; AZStd::vector<AzToolsFramework::ActionOverride> EditorPointLightComponentMode::PopulateActionsImpl() { return AZStd::vector<AzToolsFramework::ActionOverride> { AzToolsFramework::ActionOverride() .SetUri(s_resetPointLight) .SetKeySequence(QKeySequence(Qt::Key_R)) .SetTitle("Reset") .SetTip("Reset all Point Light State") .SetEntityComponentIdPair(AZ::EntityComponentIdPair(GetEntityId(), GetComponentId())) .SetCallback([this]() { const AZ::EntityId entityId = GetEntityId(); // ensure we record undo command for reset AzToolsFramework::ScopedUndoBatch undoBatch("Reset Point Light"); AzToolsFramework::ScopedUndoBatch::MarkEntityDirty(entityId); EditorLightComponentRequestBus::Event( entityId, &EditorLightComponentRequests::SetPointMaxDistance, 1.0f); /// other set functions to return state to default... // refresh manipulators Refresh(); // ensure property grid values are refreshed AzToolsFramework::ToolsApplicationNotificationBus::Broadcast( &AzToolsFramework::ToolsApplicationNotificationBus::Events::InvalidatePropertyDisplay, AzToolsFramework::Refresh_Values); }) }; }