Deja cargar el post...

Intro
Bueno primero que nada HOLA. Ahora si, segundo que nada, quería comentarles que como los temas que estamos tocando ahora son mas "complejos", voy a incluir menos cosas. Pero mejor explicadas.
Eso es bueno porque muchos dijeron tener problemas entendiendo la parte de la programación, así que voy a tratar de explicarlo mejor.

Los PostTutoriales anteriores a este:

Música para Ambientar:

Indice:
- 1.- Crear un Nuevo Canvas
- 2.- Modificar Scripts
- 3.- Crear Nuevos PowerUps
- 4.- Generación Aleatoria y Build

1.- Crear un Nuevo Canvas
Una vez abierto el proyecto donde lo dejamos, y abierta la escena lo primero sera hacer que los textos en pantalla se vean mejor.
Seleccionen el Canvas en el hierarchy, y en el inspector tilden la opción Pixel Perfect.
Si se fijan en la pestaña Game, se puede ver como se vuelve mas nítido el "New Text" y la barra de vida.

Ahora vamos a hacer otra corrección, seleccionen en el hierachy el texto con el que mostramos el score:
Canvas > Text
Cámbienle el nombre a "Puntos"
Ahora dupliquenlo (ctrl + D), y a la copia pónganle de nombre "Objeto".

Pongan la scena de frente(Con el icono en la esquina de la pestaña scene). Y hagan doble click en canvas para centrarlo
Con la herramienta transformar(Letra T), muevan el nuevo texto "Objeto" al centro y agrandenlo bastante.
Tilden la opción "Best Fit" y con la herramienta T muévanlo al centro, horizontal y verticalmente(La herramienta T te ayuda a colocarlo en el centro exacto)
Inviertanle los colores para que no se vea como los puntos. Pongan el texto en negro y el contorno en blanco.
Pongan la opcion para que se estire en ambas direcciones en Rect Transform. Y ahí mismo también cambien el tamaño Scale solo en el valor Y a 0(Solo en el Y).
Así se tiene que ver el inspector del text "Objeto"(El texto ya no se va a ver en pantalla pero esta bien):

Tip:
Se que lo dije antes, pero recuerda siempre "experimentar" en un proyecto distinto al que usamos aquí para evitar perderte/confundirte
Eso es todo lo que vamos a tocar de canvas por ahora. Este nuevo texto lo vamos a usar para que nos diga "que" tipo de PowerUp recogimos.

2.- Modificar Scripts
De momento no vamos a crear nuevos scripts, sino a modificar los que ya tenemos. Primero abran el script "PowerUp"
Lo primero que vamos a hacer, es con un mismo "powerup" dar varios efectos distintos. Justo debajo de la variable ControlPrincipal control; vamos a crear dos nuevas variables.
public enum Tipo {Puntos, Daño, Vida};
public Tipo tipoActual;
un enum, lo podemos usar para todo lo que sea por ejemplos estados. Si es uno cosa, no es otra. Por ejemplo en un scrip de animación podes hacer un enum para encapsular todas las animaciones; caminar, correr, idle.
Y solo una puede estar activa a la vez. Osea, si esta corriendo, no esta caminando.
La variable que esta debajo la usamos para poder ver estas opciones en el inspector. Van a aparecer como un menú desplegable.
Así se tiene que ver el script ahora, y así se va a ver en Unity cuando guarden los cambios:
De momento no hacen nada porque no le dijimos para que son o como usarlos. Este enum, lo vamos a usar para decidir si un PowerUp te da +10 puntos, o te resta -10 vida, o te cura +10 vida.
Primero hagamos que sirva para seguir dando puntos como hasta ahora.

La linea donde dice control.puntos += 10; la vamos a remplazar con:
control.PowerUp(tipoActual.ToString());
Esto lo que hace es activar el method "PowerUp" que esta en control principal. Como ese method aun no lo creamos, va a estar en rojo como si fuera un error. No le presten atención, ya mismo vamos a crearlo.
Abran el script ControlPrincipal y como verán el único method que tiene es el Update.
Primero que nada vamos a agregar algunas variables nuevas, y a modificar muy poco el void Update:
Debajo del void Update () vamos a crear cuatro nuevos method. Son largos, asegúrense de escribirlos bien y respetar cada minúscula/mayúscula, así como los punto y coma.
Primero
Punto 1
public void PowerUp (string tipo)
Este es un método. Es el que llamamos desde el script anterior.
Entre las paréntesis hay una variable de texto, cuando llamamos el metodo desde el otro script, enviamos entre paréntesis un texto que se va a almacenar en esta variable("tipo" es el nombre de la variable)
Punto 2
switch (tipo)
switch en este caso se usa como condicional(como cuando usamos if). Pero lo que hace es comparar el valor que esta en las paréntesis, con diferentes valores. Si coincide con uno, se cumple la condición y se ejecuta la acción que viene después.
En este caso entre las paréntesis esta "tipo" que como hablamos antes es una variable string(texto).
Punto 3
case "Puntos"
case son las opciones con las que se compara el valor en switch para ver si se cumple la condición. En este case el valor es "Puntos". Así que si dentro de la variable "tipo" viene la palabra "Puntos", esta condición, o este case. Se va a cumplir y se ejecutara lo que sigue.

Segundo
Este esta bastante claro. Si este método es llamado(desde el método anterior por ejemplo)
va a sumar 10 puntos. Y ObjetoTexto("+10 Puntos"es otro método al que estaremos llamando, y enviándole la información entre paréntesis(un string ya que es texto).

Tercero
Este recibe un valor string, y lo almacena en una variable llamada "tipo"(Como el primer método que vimos ahora). Después lo que hace es muy simple, cambia 3 variables. Una de ellas es un texto que lo remplaza por el que tiene almacenado en "tipo".

Cuarto
En este método, tenemos una condicional. Que si la variable "textTime" es mayor a cero, cambia el tamaño de "mostrar_objeto" y ademas va reduciendo el valor "textTime" poco a poco.

El Script entero hasta este punto lo pueden encontrar aquí: Link

Hecho eso guarden el código y vayan a Unity.
Seleccionen "Control Principal" en el hierarchy, y verán que en su script tiene la variable "mostrar_objeto". Arrastren a esa variable el text que creamos hoy y renombramos "Objeto".
Las esferas de los powerups deberían estar todas en el estado "Puntos" por defecto, así que pongan play y prueben si efectivamente les suman 10 puntos cada una.
Solo que ahora les aparece un "+10 Puntos" en medio de la pantalla y luego desaparece.
Y ustedes dirán "Todo esto para eso??!!1!", en realidad esto costo porque ya estamos dejando la base de lo que vamos a hacer a continuación.

3.- Crear Nuevos PowerUps
Con todas las cosas que hicimos en el apartado anterior, ahora va a ser relativamente facil añadir un par de PowerUps que hagan cosas distintas.
Primero que nada, recuerdan que pusimos todos los PowerUps adentro de un empty object para mantenerlos ordenados? Bueno saquen uno de ahí, separenlo de los demás, y luego borren todos los otros.

Ese que separaron pónganlo delante del player cosa de darle play y agarrarlo a los poco pasos.
Ya que están arrastrenlo a la carpeta prefabs, para convertirlo en un prefab.

Ahora vamos a modificar el script "ControlPrincipal".
Primero vamos a agregarle una nueva variable:
GameObject player;
Y un nuevo método, justo debajo de las variables:
Ahora vamos a modificar el método public void PowerUp (string tipo). Vamos a agregarle dos nuevos case. Por ahora solo actuaba si el texto recibido era "Puntos". Ahora vamos a hacer que funcione también con "Vida" y "Daño".
El método modificado tiene que quedarles así:
Es normal que les quede algo en rojo ya que aun no creamos los métodos para estos dos nuevos case.
Debajo del método void Puntos () creen estos dos nuevos métodos:
¿Que hicimos con esto? Ahora si el método public void PowerUp (string tipo) recibe el texto "Vida" en vez de "Puntos". Va a llamar al método que acabamos de crear llamado void Vida(). Y en vez de sumar 10 puntos, va a curar 10 de vida.
Lo mismo con el método que creamos llamado void Daño(). Si es llamado en vez de dar puntos o curar. Va a hacernos 10 de daño.
Pueden ver el script completo hasta este punto aquí: Link

Lo mejor que podemos hacer ahora es probarlo.
El powerup que dejaron en frente al jugador, dupliquenlo dos veces(ctrl + D) y pónganlos un poco separados:
Y en cada uno pónganle un tipo distinto en el inspector(Vida, Puntos, Daño):
Ahora pruebenlos. En teoría cada uno tiene que hacer algo distinto, y el texto en pantalla debería ser acorde.

Antes de terminar vamos a hacer una pequeña modificación al script "Vida". Ya que como esta ahora, si tomamos un powerup de +10 vida, estando full vida, vamos a tener 110 pero la barra es hasta 100.
Vamos a agregar un else if. El script entero debería verse así:

4.- Generación Aleatoria y Build
Bastante bien por ahora. Vimos algunos scripts bastante complejos. Y ya tenemos la opción de usar tres PowerUp distintos.
Lo que sigue es generación aleatoria. Para que los powerups aparezcan en lugares al azar en el mapa. También queremos que siempre hayan 10. Cosa de que si recogemos uno, otro aparezca en otro lugar.
Borren los powerups del mapa(Los tenemos guardados en el prefab).
Abran nuevamente el script "ControlPrincipal". Y añadan estas dos variables:
public int maxObjetos;
public GameObject Objeto;
En void Update () vamos a agregar esta linea:
CrearPowerUps ();
Que es para llamar un método que vamos a crear a continuación.
Al final de todos los metodos vamos a crear estos 2:
Primero
La variable i va a servir para contar la cantida de PowerUps que hay en escena al mismo tiempo. Ahi dice que si i es menor a maxObjetos. A i se le suma 1 punto y se crea un PowerUp.
En los métodos que habíamos creado verán que cada vez que se toma un powerup se le resta 1 a la variable i. Cuando eso pase se va a volver a crear otro powerup, y así sucesivamente para que siempre hayan 10.
Cambien fíjense que en la linea donde "creamos" el prefab, en donde debería estar la posición donde va a aparecer, hay en realidad un llamado a un método que aun no creamos, es el siguiente.
Segundo
Este método lo que hace cuando es llamado, es devolver un vector3. Osea una posición en el mundo 3D.
Si se fijan, hay un int para cada eje (x, y, z). y es siempre 1, osea que siempre va a estar a la altura del jugador. Pero x y z se eligen en un numero al azar en -50 y 50. Este es el tamaño del mapa que creamos.
Por ultimo agregamos
i -= 1;
Al método:
public void PowerUp (string tipo)
Así queda el código completo(Este ya no se va a modificar mas): Link

Ahora guarden el código y vayan a Unity. Elijan el ControlPrincipal en el hierarchy. Y verán que en el inspector les aparecen 2 variables "Objeto" y "Max Objetos".
En "Max Objetos" pongan 10.
Y en "Objeto" arrastren el prefab PowerUp, desde la carpeta prefab.
Ahora denle play, y verán como se aparecen las 10 bolas. De hecho si caminan hasta una y la agarran notaran como aparece otra al azar.
El único problema con esto. Es que todos los PowerUps, son "Puntos" ya que así estaba guardado.
Abran el script "PowerUp" y agreguen esta linea en el void Start():
tipoActual = (Tipo)Random.Range(0,3);
Aquí el script "PowerUp" completo: Link
Esto hace que el enum sea uno al azar entre las tres opciones
- Puntos
- Daño
- Vida
Ahora si lo prueban y ponen pausa, verán que los 10 powerup que se generaron son distintos. Esto da un poco de picante ya que no sabes si estas agarrando puntos o curandote. O en el peor de los casos recibiendo mas daño....

Ahora vamos a hacer algo que no habiamos hecho hasta ahora pero quizas ya sepa. Y es armar la build. Esto exportar el juego a un ejecutable para que cualquiera pueda jugarlo, o incluso para poder probarlo fuera de Unity.
Primero que nada, guarden la escena y el proyecto.
Luego ahí mismo en File, vayan a Build settings...
Presionen Add current para que se añada la scena que están haciendo. Y luego build(Siempre y cuando ya este configurado para su sistema operativo).
Esperan un poco, y les va a crear un ejecutable y una carpeta. Si le dan click al ejecutable, les va a abrir el juego tal cual lo prueban en Unity mismo, pero ahora lo ven como ser vería terminado.
Acá justo agarra un -10 de Vida cuando tenia poca vida y me venia una bola de frente y morí :c
Recuerden que en el Tuto anterior programamos para reiniciar la partida con la R.

Encuestas

Mis Post Anteriores

Y este que es del proyecto que estamos haciendo para un juego taringuero, si te gusta todo esto tenes que participar, no hace falta que sepas desarrollar aun

En ese post podes leer la idea y enterarte un poco, o unirte directo a la comunidad:

¿Que sigue?
Como de ahora en mas vamos a ir cuesta arriba y los tutos van a ser mas difíciles(Para ustedes, y para mi el hacerlos). Creo que es mejor dejarles elegir que tienen mas preferencia que saque antes. Así que acá dejo una encuesta especial que va a decidir de que va mi siguiente tuto.
Las primeras 4 opciones son de las que siguen la linea del tutorial, las siguientes son los que iba a hacer como tutoriales "Extra" así que no tienen conexión con estos que venimos haciendo.

Bueno como siempre les pido que suban screen de sus avances, me interesa saber como es que van siguiendo los tutoriales y como es que hacen las cosas, también para poder mejorar yo a la hora de hacerlos.
Gracias por pasar, por leer y acepto todas las criticas que vengan

Siganme en alguna red social y acá en taringa que es gratis

Gracias por leer, Saludos!

