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.