Hay distintas maneras de trabajar con una cámara en los juegos, y puede variar mucho según el tipo de juego que estés creando. En Unreal Engine, las cámaras suelen estar compuestas por un actor con un componente de brazo de resorte, además de un componente de cámara, que renderiza la vista. Para una configuración básica de la cámara, consulta Cómo utilizar las cámaras en Unreal Engine.
En este documento, los desarrolladores explicarán cómo decidieron implementar la cámara específicamente para Parrot y cualquier configuración destacable que valga la pena señalar.
Subsistema de cámaras de Parrot
Como primer paso, se identificó qué mapas podrían necesitar ajustes de cámara específicos del entorno.
Los desarrolladores crearon UParrotCameraSubsystem, que comparte la vida útil del entorno e inicializa la cámara con esta configuración en BeginPlay. La configuración específica del mapa se almacena en AParrotWorldSettings, que es útil para almacenar cualquier dato por mapa. En cuanto a la cámara, esta sería la clase de cámara deseada, el modo de movimiento y el límite superior e inferior en el eje Z cuando ya no queremos que la cámara siga al jugador. La clase en sí es opcional y si no se proporciona ninguna es una ruta válida. Esto se hace en el menú principal.
Para conocer la razón detrás de la elección de usar un subsistema, consulta la documentación de Subsistemas en Parrot.
La configuración del entorno está disponible en el panel Configuración del entorno en el editor.
Cámara de Parrot
AParrotCamera es donde ocurre la mayor parte de la lógica. Cuando el subsistema inicializa la cámara, se proporciona lo siguiente: el jugador al que seguir, el modo de movimiento y los límites de la configuración del entorno.
La cámara tiene tres modos de movimiento posibles: None (ninguno), Fixed (fijo) y Follow (seguir).
None (ninguno) es exactamente como se describe. La cámara no ejecutará ninguna acción.
El modo de movimiento Fixed (fijo) es simple. Cuando el jugador entra en un volumen delimitado, el subsistema le asigna una ubicación fija a la cámara, y esta interpola hasta ella. A continuación, el jugador tiene la libertad de moverse hasta que se actualiza el modo de movimiento.
El modo de movimiento Follow (seguir) es más complejo; para entenderlo mejor, observa Content/Blueprints/BP_PlatformerCamera a modo de referencia visual. AParrotCamera posee una caja de activación por movimiento y una malla de bloqueo como subobjetos predeterminados. Esto significa que cada instancia de AParrotCamera los añade de forma automática en su jerarquía. Ambos están alineados con el campo de visión de la cámara, el brazo de resorte y la perspectiva para el efecto deseado. Estos dos componentes están asociados al actor de cámara y lo siguen en el entorno.
La malla de bloqueo evita que el jugador se mueva hacia atrás tras colisionar con el jugador en el entorno.
Cuando el jugador entra en contacto con la caja de activación por movimiento, la cámara intenta interpolar hasta el valor X del jugador a una velocidad establecida. La velocidad también se multiplica por cuánto ha avanzado el jugador desde el límite más a la izquierda del volumen de activación. Así, mientras más se adentre el jugador en el volumen, más rápido debería moverse la cámara para ponerse a la par.
Como resultado, el jugador puede moverse con libertad a la izquierda de la pantalla hasta la malla de bloqueo, pero la cámara seguirá al jugador cuando este pase el umbral. Esto proporciona un efecto agradable a medida que el jugador se mueve por el entorno en el eje X.
Otro punto relevante acerca del modo de movimiento Follow (seguir) es que se rastrea la última ubicación conocida del jugador. Si el jugador excede los límites del entorno en el eje Z, o si el personaje jugable se destruye, interpolamos la cámara a la última ubicación conocida del jugador. Esto impide el movimiento abrupto de la cámara según el movimiento o el estado del jugador.
Por último, el componente de cámara en sí de BP_PlatformerCamera tiene algunos ajustes que merecen destacarse. El modo de proyección tiene perspectiva con un campo de visión de 90 grados y una relación de aspecto de 1.77 que son imágenes de alto rango dinámico estándar. En Opciones de cámara, restringimos la relación de aspecto para que la cámara siempre se vea bien, independientemente de la resolución en que se ejecuta la aplicación.