TDD_Player_TPC - 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. Se resetearán los inputs que coincidan los botones para realizar una acción, haciendo que no se solapen las diferentes acciones.

Si la pausa esta activada

Estarán disponibles las siguientes acciones:

  • UI_Move_Paused
  • UI_Interact
  • UI_CancelPauseMenu

Si el jugador está introduciendo un código

Estarán disponibles las siguientes acciones:

  • Se pasará a CodeUI a través de la función Inputs(), los valores de los inputs UI_Move, Interact y Cancel, para que lo gestione ese script.

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 está examinando un objeto

Estarán disponibles las siguientes acciones:

  • LookingObject
  • Cancel

Si el jugador no está hablando, ni en una cinemática, ni examinando un objeto

Estarán disponibles las siguientes acciones:

  • JumpAndGravity
  • GroundedCheck
  • Move
  • Interact
  • Listen
  • Hint
  • SpectralVision
  • Cancel
  • Pause
  • SM

ResetInputs

Estará justo después de realizar cualquiera de las acciones anteriores, reseteando el input para que no haya repetición ni acumulación de acciones.

UI_CancelPauseMenu

Esta función cancelará o volverá hacia atrás en los menús estén activados si detecta el input Cancel. Esto lo hará llamando al método VolverAMenuAnterior() del menú que este activo en el script MenuInicial.

UI_Interact

En esta función se ejecutará la lógica de los menus, dependiendo si se usa un botón, slider o toggle mediante las siguientes funciones del menú que este activo en el script MenuInicial.

UI_Move_Paused

En esta función se ejecutará la lógica de los menus de pausa, dependiendo si se usa un botón, slider o toggle mediante las siguientes funciones del menú que este activo en el script MenuInicial.

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/X/A 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().

Pistas

Al pedir pistas, cuando el jugador presione E/X/A y el histórico no está activo existen dos opciones:

  • Sin modo auto o skip activado: llamará a su método Possess().

Si no esta en una Cinemática/Pista 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/X/A 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/X/A, 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.OverlapCapsule los objetos alrededor del jugador:

  • Si el jugador ya posee un NPC: buscará objetos implementen tanto la interfaz IInteractuable como IPossesable.
  • 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.

Listen

Esta función permite al jugador escuchar a los NPCs, abriendo el sistema de diálogo.

Si no se puede escuchar

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

  • Diálogo Normal activado.
  • Modo Auto activado.
  • Modo Skip activado.
  • Escuchar ya activado.

En otro caso

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

  • NPCPossessable: llamará a su método StartListeningDialogue().

Hint

Esta función permite al jugador pedir una pista, abriendo el sistema de diálogo.

Si no hay otro diálogo activo y no esta el modo Cinemático activo:

  • HintManager: llamará a su método Possess(), ya que implementa la interfaz IPossessable.

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/L1/LB 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.

Pistas

Si el jugador presiona H/L1/LB 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/L1/LB 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/pistas. 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/□/X. Al estar activo, el texto pasará lentamente de manera autónoma. Tanto en Cinemáticas/Pistas como fuera de ellas, si el jugador presiona R/□/X 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/△/Y. Al estar activo, el texto pasará rápidamente. Tanto en Cinemáticas/Pistas como fuera de ellas, si el jugador presiona Z/△/Y 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/R1/RB, 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.

LookingObject

Esta función gestionará cuando el jugador esta examinando un objeto, hará rotar el objeto en función de los inputs del jugador mediante el ObjectManager y la función Rotate(), que enviará el valor de los inputs para rotarlo en pantalla.

Cancel

Esta función cancelará la acción que este realizando el jugador, habiendo dos opciones:

  • Si el jugador está mirando un objeto: marcará en el ObjectManager que deje de mirarlo.
  • Si el jugador está poseyendo a alguien: ejecutará la función CancelPossession del PossessionManager.

Pause

Esta función se activará cuando el jugador pulse Escape/Options/Start, activando en el PauseManager el menú de pausa.

SM

Esta función se activará cuando el jugador pulse TAB/L1/LB, activando en el SMManager el menú de misiones.