ThirdPersonController.cs - ChristianDominguezVicente/TFM GitHub Wiki

Third Person Controller

A continuación, se detallan las funcionalidades que se han añadido las originales del Starter Assets Pack.

Update

En esta función, la cual se ejecuta en cada frame, se establecerá qué acciones puede hacer el jugador dependiendo del contexto.

Si el jugador está hablando o en una cinemática

Estarán disponibles las siguientes acciones:

  • Interact
  • History
  • UI_Move
  • Auto
  • Skip

Si el jugador no está hablando ni en una cinemática

Estarán disponibles las siguientes acciones:

  • JumpAndGravity
  • GroundedCheck
  • Move
  • Interact
  • SpectralVision
  • Cancel

Interact

En esta función se maneja la lógica de interacción del jugador, adaptandose según el contexto.

Cinemáticas

Al estar en una cinemática, cuando el jugador presione E/Δ y el histórico no está activo existen dos opciones:

  • Si es una Pregunta: llamará a su método SelectCurrentChoice(), eligiendo una respuesta.
  • Si es una Frase (sin modo auto o skip activado): llamará a su método Possess().

Si no esta en una Cinemática y hay que Responder a una pregunta

Al no estar en una cinemática y se ha hecho una pregunta al jugador, cuando este presione E/Δ llamará a su método SelectCurrentChoice(), eligiendo una respuesta.

Si no se puede interactuar

Si esta activa cualquiera de las siguientes opciones no se podrá interactuar:

  • Histórico activado.
  • Modo Auto activado.
  • Modo Skip activado.

En otro caso

Esta funcionalidad se activará cuando el jugador presione E/Δ, la cual buscará el objeto más cercano dentro de un radio usando la función llamada GetInteractuables(). Posteriormente, si el objeto implementa la interfaz:

  • IInteractuable: llamará a su método Interact().
  • IPossessable: llamará a su método Possess().

GetInteractuables

Esta función detectará mediante Physics.OverlapSphere los objetos alrededor del jugador:

  • Si el jugador ya posee un NPC: buscará solo objetos implementen la interfaz IInteractuable.
  • Si el jugador no está poseyendo un NPC: buscará solo objetos implementen la interfaz IPossessable. Por último, devolverá el objeto más cercano según la distancia al jugador.

History

Esta función permite al jugador activar o desactivar el histórico con todos los diálogos que ha tenido hasta el momento. Se divide en dos modos esta función.

Cinemáticas

Si el jugador presiona H/Select y no se hecho ninguna pregunta al jugador, ni esta activo el modo Auto o el modo Skip, activará o desactivará el histórico con todos los diálogos hasta el momento, mostrando el ratón en pantalla cuando el histórico este activo, y ocultándolo cuando el histórico este desactivado.

Si no esta en una Cinemática

Mediante GetInteractuables() se obtendrá el NPC más cercano, comprobando si tiene activo el modo Auto o el modo Skip. Si no lo tiene activado, el jugador podrá presionar H/Select mientras este hablando con un NPC, mostrando u ocultando el histórico.

UI_Move

Esta función gestiona la navegación en la interfaz. Esta funcionalidad funcionará tanto dentro como fuera de cinemáticas. Actualmente, estás son las funcionalidades que desempeña:

  • Seleccionar la respuesta correspondiente a una pregunta: detecta la entrada vertical del jugador, ui_mover.y
  • Desplazarse por el histórico de los diálogos: desplazamiento vertical usando la entrada direccional.

Auto

En esta función se activa el modo de conversación automática o Auto cuando el jugador pulse R/□. Al estar activo, el texto pasará lentamente de manera autónoma. Tanto en Cinemáticos como fuera de ellas, si el jugador presiona R/□ y no se hecho ninguna pregunta al jugador, ni esta activo el histórico o el modo Skip, activará o desactivará el modo Auto.

Skip

En esta función se activa el modo de salto de diálogo Skip cuando el jugador pulse Z/R2. Al estar activo, el texto pasará rápidamente. Tanto en Cinemáticos como fuera de ellas, si el jugador presiona Z/R2 y no se hecho ninguna pregunta al jugador, ni esta activo el histórico o el modo Auto, activará o desactivará el modo Skip.

Spectral Vision

Esta función activará la Spectral Vision, la cual permitirá al jugador ver los objetos IInteractuables y IPossessable de la escena mientras mantiene pulsado el clic derecho/R2, diferenciados por colores.

En primer lugar, al pulsarlo se producirá una transición visual suave hacia el efecto visual, y al soltarlo ocurrirá lo mismo, pero de forma inversa. Para que esto ocurra se ha creado un nuevo Universal Renderer Data, llamado Custom_Renderer. Esta situado en /Assets/Settings.

Custom_Renderer

Este Universal Renderer Data tiene las mismas configuraciones que el que viene por defecto, excepto por los siguientes Renderer Features, más concretamente tres Render Objects:

  • IInteractuables: Será activado en la Spectral Vision, siendo un Outline de color rojo, situado el material en la carpeta /Assets/Shaders.
  • IPossessables: Será activado en la Spectral Vision, siendo un Outline de color verde, situado el material en la carpeta /Assets/Shaders.
  • Render Objects: Carga las dos capas de estos objetos para que sean visibles.

Cancel

Esta función cancelará la acción que este realizando el jugador. Ahora mismo solo esta implementado cuando el jugador esta poseyendo a alguien.