Project Golf
Desarrollador: AJOS GAMES
Grupo INSO 4C
Agustin Ghio
Juan Luis Soto
Óscar Viudez
Óscar Maestre
Samanta Barros
Elevator Pitch
Project Golf es un juego de puzzles en VR en donde tomas el rol de un becario en un
observatorio, en el que encuentras lo que tu crees es un minijuego, en donde el objetivo es
impactar un asteroide contra un planeta utilizando las órbitas y gravedades de otros planetas
para guiar a este, resolviendo puzzles y ubicando cada cuerpo estelar a tu gusto, jugando a ser
dios. ¿A qué límites llegará tu necesidad de aplacar tu aburrimiento? O más importante aún…
¿A qué coste?
Mecánicas
Las mecánicas principales giran en torno a colocar y quitar distintos planetas en unos puntos
específicos dentro de un puzzle en 3 dimensiones, con el objetivo de que el jugador consiga
llevar un asteroide desde el punto de lanzamiento hasta el planeta objetivo.
Cada uno de esos planetas tiene su propia gravedad, que atraerán al cuerpo en función de su
fuerza y que el jugador deberá saber colocar para que el asteroide vaya en la dirección que
quiere. Además el usuario podrá aumentar y disminuir el tamaño para cambiar su gravedad y
adaptarlo a lo que se requiera para resolver el problema.
Para ver que hay que cambiar para obtener la solución, el jugador podrá subir a la parte
superior del observatorio y ver la trayectoria del asteroide.
También habrá distintos obstáculos en algunos de los niveles para aumentar la dificultad.
Género
El género del juego va a ser un Juego de VR de Puzzles, enfocado en un gameplay de estilo
whimsical y sin poner demasiado en juego al jugador, permitiéndole experimentar e intentar
cada nivel una y otra vez. Esto permite que el juego sea más casual y menos movido, lo que
también ayuda a evitar generar mareos o cinetosis en el jugador.
Audiencia
El público objetivo es una audiencia adolescente y adulta de entre 15 y 30 años a los que les
guste los juegos de puzzles. El juego requiere de cierto entendimiento de física básica, por lo
que un público más joven podría sentirse perdido o abrumado con la dificultad del juego.
El tipo de audiencia que se busca es una audiencia entre casual y gamer, ya que el juego
consta de varios puntos de guardado (por cada nivel) pero se presta a la posibilidad de
agregar más desafío al jugador a través de la falta de uso de algunas herramientas de ayuda, u
otros tipos de desafíos que el mismo jugador pueda intentar.
Estilo Artístico
El estilo artístico es un estilo moderno rozando con futurista, con las simulaciones y puzzles
tomando lugar con un efecto de holograma, que permite al jugador tener una idea de que todo
con lo que juega es un ambiente controlado en donde los errores pueden ser fácilmente
corregidos.
En general, el juego será bastante tranquilo, con pocos sonidos ambientales y un énfasis en el
feedback al usuario a través de sonidos de interacción y reacción con respecto a los botones
pulsados, los pasos dados, y las colisiones del asteroide en sí.
Historia y Contexto
Eres un becario recién llegado al Observatorio de NADA, un lugar repleto de tecnología
avanzada y con una atmósfera tan tranquila que roza el aburrimiento. Sin embargo, un día,
mientras cumplías con tus tareas rutinarias, descubriste algo inesperado en uno de los
monitores: un curioso minijuego oculto entre los sistemas del observatorio.
Imagen de la empresa
Con la emoción de alguien que finalmente encuentra algo interesante en medio de un mar de
monotonía, decide probarlo. Pero lo que parecía un simple pasatiempo pronto se convierte en
algo más…
Diario de Desarrollo
Sprint 1 (16 de Febrero):
Resumen:
Samanta:
Se crea el sistema de puntos de anclaje para los planetas de cada nivel. Esto se hace con un
Socket Interactor en los puntos, de forma que al pasar por encima los planetas se quedan en
esa posición.
También se crea la interacción con los planetas a través de un Direct Interactor en ambas
manos del jugador, de forma que pueda coger los planetas desde cualquier punto con el attach
dinámico del Grab Interactor de los planetas.
Por último se empieza el sistema de reescalado de planetas, donde ya se puede cambiar el
tamaño de los planetas al cogerlo con ambas manos. Aún queda arreglar los valores fijos del
reescalado para que el usuario no tenga que ser tan preciso y se cambie automáticamente de
tamaño al soltar una de las dos manos.
Oscar Maestre:
Diseña los 3 niveles tutoriales y crea un esquema del cuarto nivel.
También se encarga de crear el obstáculo agujero de gusano.
Oscar Viudez:
Se empieza con el sistema de físicas para calcular las gravedades que afectan al asteroide.
Para ello, he implementado la fórmula que calcula la fuerza de un objeto sobre otro.
Fórmula para calcular las fuerzas que ejercen los planetas sobre el asteroide.
Sumando todas las fuerzas tenemos un vector que empuja al asteroide en la dirección
calculada. Con este sistema, ya podemos implementar varios planetas que ejercen gravedad
sobre el asteroide.
Juan Luis:
Creación del menú de inicio, de forma interactiva y creación del script que instancia la bala
cuando queramos disparar, por ahora no está implementado porque no estaba pensado para
este sprint.
Agustín:
Durante este sprint se crea el shader y los visuales para conseguir el efecto de holograma,
utilizando una textura de overlay en blanco y negro que se utiliza para pasarle esta al canal
alfa del objeto deseado, creando así un efecto de líneas horizontales, las cuales se rotan para
que estén horizontales al horizonte del mundo. Luego se crea un efecto de brillo dentro de la
textura, y se pasa esto al canal de color, junto a un tinte que toma el color del material
original (o un azul claro en caso de no haber color base) para así crear el efecto deseado.
Sprint 2 (2 de Marzo):
Oscar Viudez:
Para este sprint, se crea una herramienta que ayude a la rápida implementación de niveles en
futuros sprints. Donde esta herramienta, muestra por pantalla la ruta que tomará el asteroide
al ser disparado. Esto provoca un beneficio en el tiempo de montaje de niveles, pues no es
necesario comprobar la ruta del asteroide.
Representación de la ruta que recorrerá el asteroide.
Si la ruta sale pintada de color rojo, implica que el asteroide chocará con un obstaculo. En
caso contrario se mostrará verde.
Representación de la ruta que recorrerá el asteroide sin colisión.
Se crean lunas como nuevo obstáculo para el asteroide. Estos son satélites que orbitan un
planeta dado y calculan la velocidad inicial para orbitar el planeta asignado con la siguiente
fórmula.
Fórmula para calcular la velocidad de una órbita dada su distancia al objeto.
De esta forma, se implementa el satélite a la nueva herramienta para a su vez poder ver las
trayectorias de los satélites.
Visualización de las nuevas órbitas de los satélites.
Para finalizar, la nueva herramienta permite filtrar qué órbitas se desean ver en pantalla. Esto
hace más fácil la vista de la trayectoria que acabará tomando el objeto en movimiento.
Samanta:
Se cambia el sistema de escalado de los planetas. Ahora no hay valores fijos, sino que el
jugador puede aumentar y disminuir el tamaño del objeto hasta unos valores predeterminados
ya asignados. Además la gravedad del planeta cambia conforme aumenta o disminuye el
tamaño.
Esto implica que más adelante se debe crear un botón para activar y desactivar la simulación
y crear distintos planetas con distintas gravedades para que haya variedad en los puzzles.
También se ha creado la base del mapa principal del juego.
Oscar Maestre:
El objetivo de este sprint es finalizar el desarrollo del obstáculo WormHole. Se implementará
un sistema de teletransporte que garantice que un asteroide solo pueda atravesar el WormHole
si colisiona en el lado correcto. Además, el asteroide será teletransportado a otro WormHole
conectado y ajustará su dirección en función de la orientación del nuevo portal.
El WormHole es un tipo de Planet que actúa como un portal interconectado con otro
WormHole. Cuando un asteroide choca con la entrada válida del WormHole, es
teletransportado al segundo portal y su dirección de movimiento es ajustada a la orientación
del nuevo portal.
Para lograrlo, se implementan cálculos matemáticos que aseguran que el asteroide solo se
teletransporte si impacta en la cara correcta del WormHole. Además, la velocidad del
asteroide se mantiene tras el teletransporte.
imagen del asteroide chocando en la cara correcta del wormHole
imagen del asteroide chocando en la cara incorrecta del wormHole
Agustín Ghio:
En este sprint se crea el shader y el behavior de los agujeros negos. Para hacer el efecto de
que la luz se está distorsionando alrededor del agujero, se utiliza un plano, el cual se modifica
la posición para que esté mirando a la cámara del jugador, y se utiliza el nodo de “Scene
color” para recoger lo que vería la cámara si se viera a través del plano, y aplicando
modificadores de sonido y espiral, los cuales se rotan usando el nodo tiempo, se consigue
crear el efecto deseado.
Para el centro del agujero, se usa un efecto fresnel con un tinte amarillo-anaranjado para
poder dar el efecto deseado.
Mecánicamente, los agujeros negros usan el script de planeta, sólo que utilizando una fuerza
gravitatoria mucho más fuerte.
Juan Luis:
En este sprint he arreglado los assets que hemos usado para crear y dar forma inicial al mapa,
He añadido el script de disparo y un botón que sirve como disparador el cual al pulsarlo
instancia un asteroide, también he ayudado con la creación y escalado del mapa.
Sprint 3 (16 de Marzo):
Samanta:
Se ha arreglado el bug que impedía que los planetas se colocaran adecuadamente en los
sockets después de soltarlos.
También se ha creado un sistema de eventos que cuando se inicia la simulación no permite al
jugador agarrar planetas hasta que no termine la simulación. Este sistema si fuera necesario
se puede agregar a otros elementos del escenario cambiando la capa de interacción del
collider.
Óscar Maestre:
Se ha encontrado un asset para el WormHole y se mejoró con respecto a la última vez.
Imagen del WormHole funcionando.
Se creó el primer nivel ubicado en la escena NivelPrueva.
Imagen del primer nivel.
Agustín Ghio
Para este sprint, se implementa la capacidad de permitir al jugador moverse y
teletransportarse. Para ello, se utiliza el TeleportationProvider que viene con XRToolkit, y se
asigna el area del suelo del nivel como un Teleportation Area. El botón se sube hacia arriba, y
se crea un TeleportAnchor para que el jugador pueda teletransportarse a este, lo que permite
rápidamente al jugador moverse a donde quiere. De momento el rayo se ha puesto de forma
lineal para permitir llegar, pero se probará en futuros Sprints ajustarlo para que pueda ser
curvado de una manera que permita el teletransporte hacia arriba correctamente.
Juan Luis Soto
En este sprint arregle un bug con la instanciación de los asteroides al pulsar el botón de
lanzamiento, ahora debieran funcionar correctamente y creé el prefab del cinturón de
asteroides con su rotación.
Oscar Viudez:
Se crea una herramienta de edición de niveles, que se encarga de recoger todos los datos
necesarios para almacenar y posteriormente cargar los niveles a parte desde un
ScriptableObject.
Imagen con el nuevo menú para desplegar la herramienta.
Una vez abierto el editor aparece lo siguiente.
Si creamos un nivel desde cero, el editor recogerá todo lo necesario de la escena actual para
cargar el nivel. Por el otro lado, cargar un nivel pedirá que selecciones uno de los
ScriptableObjects ya creados para cargar.
Aquí podremos modificar desde el editor todos los valores que veamos convenientes.
En caso de cerrar el nivel, el editor se asegurará de que es la acción correcta.
Finalmente, guardar el nivel creará un ScriptableObject con todo lo necesario en la carpeta de
Assets/_Scripts/ScriptableObjectsData/