Single Tech Games

Un Flappy Bird con C# en Unity 2D parte 4

Hola gente! Regreso después de tomarme un pequeño “break”, pero solo para los tutoriales, después estoy peor que esclavo con el último juego que estoy desarrollando 🙁 esta semana regreso a las redes sociales, pero para promocionar mi juego 😛 así que aguantaran mis actualizaciones con imágenes de cómo voy avanzando, creo que la siguiente semana lo tendré listo el juego, le faltan varias cosas, pero lo principal ya está listo y he decidido probar con Mopub a ver qué tal me va :).

Esta semana avanzamos hasta los puntajes y la muerte de nuestro flappy gordo, solo me quedaría lo que es los sonidos, el inicio y con un poco de suerte como ponerle leaderboards y algo de temas sociales, pero ese video lo dejaré a dos semanas, quiero hacer uno que me están pidiendo bastante, así que ya saben seguimos con los tutoriales de Unity 2D ^_^
Código
FlappyScript

using UnityEngine;
using System.Collections;
public class flappyScript : MonoBehaviour {
	//Declaramos la velocidad inicial del pajaro sea igual a zero, Vector3.zero = 0,0,0
	Vector3 velocidad = Vector3.zero;
	//Declaramos un vector que controle la gravedad, no usaremos la fisica de unity
	public Vector3 gravedad;
	//Declaramos un vector que define el salto (aleteo) del pajaro
	public Vector3 velocidadAleteo;
	//Declaramos si se debe aletear, si se toco la pantalla o se presiono espacio
	bool aleteo = false;
	//Declaramos la velocidad maxima de rotacion del pajaro
	public float velocidadMaxima;
	//Agregamos una referencia de los tubos en flappy para poder modificarlos
	public TubosScript tubo1;
	public TubosScript tubo2;
	private bool juegoTerminado;
	private Animator anim;
	// Use this for initialization
	void Start () {
		anim = this.gameObject.GetComponent<Animator> ();
	}
	// Update is called once per frame
	void Update (){
		//Si la persona presiona el boton de espacio o hace clic en la pantalla con el mouse
		if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0)) {
			if( juegoTerminado == false)
				aleteo = true;
		}
	}
	//Este es el update de la fisica, que es ligeramente mas lento que el update del juego
	void FixedUpdate () {
		//A la velocidad le sumamos la gravedad (Para que el pajaro caiga)
		velocidad += gravedad * Time.deltaTime;
		//Si presionaron espacio o hicieron clic
		if (aleteo == true)
		{
			//Que solo sea una vez
			aleteo = false;
			//El vector velocidad recibe el impulso hacia arriba al pajaro
			velocidad.y = velocidadAleteo.y;
		}
		//Hacemos que el pajaro reciba la velocidad (la gravedad lo hace caer mas rapido)
		transform.position += velocidad * Time.deltaTime;
		float angulo = 0;
		if (velocidad.y >= 0) {
			//Cambiamos el angulo si Y es positivo que mire arriba
			angulo = Mathf.Lerp (0, 25, velocidad.y/velocidadMaxima);
		}
		else {
			//Cambiamos el angulo si Y es negativo que mire abajo
			angulo = Mathf.Lerp (0, -75, -velocidad.y/velocidadMaxima);
		}
		//Rotamos
		transform.rotation = Quaternion.Euler (0, 0, angulo);
	}
	//Cada vez que haya una colision con cualquier objeto que tenga un collider se actiavara esta funcion
	//Collider son Box Collider 2D, Circle Collider 2D, etc.
	void OnCollisionEnter2D (Collision2D colision)
	//void OnTriggerEnter2D(Collider2D colision)
	{
		//Si colisionamos con el tubo que se detengan los tubos
		if(colision.gameObject.name == "TuboAbajo" | colision.gameObject.name == "TuboArriba"|colision.gameObject.name == "Piso")
		{
			//Hacemos que la velocidad de los tubos se haga cero
			tubo1.velocidad = new Vector3(0,0,0);
			tubo2.velocidad = new Vector3(0,0,0);
			//Dejamos de ejecutar el aleteo(impulso) al hacer clic
			juegoTerminado = true;
			anim.SetTrigger("JuegoTerminado");
		}
		//Al momento de caer, queremos ignorar la colision con el tubo de abajo
		if(colision.gameObject.name == "TuboAbajo")
		{
			colision.gameObject.GetComponent<BoxCollider2D>().enabled = false;
		}
		//Si colisionamos con el Piso, que la gravedad no siga aumentando
		if(colision.gameObject.name == "Piso")
		{
			gravedad = new Vector3(0,0,0);
		}
	}
}

TubosScript

using UnityEngine;
using System.Collections;
public class TubosScript : MonoBehaviour {
	//declaramos la velocidad inicial de la columna
	public Vector3 velocidad;
	//La distancia que habra entre una columna y otra
	public Vector3 distanciaEntreColumnas;
	//La forma correcta de hacerlo ¿?
	public SpriteRenderer formaColumna;
	//Sumamos una vez
	private bool sumarPuntaje = true;
	public GUIText puntaje;
	void Update () {
		//funcion que mueve los tubos
		moverTubo ();
	}
	private void moverTubo()
	{
		//Los tubos iran avanzando de a pocos, igual que el Flappy bird
		this.transform.position = this.transform.position + (velocidad*Time.deltaTime);
		// y minimo -3
		// y maximo 0.6
		if (this.transform.position.x <= -13.2f)
		{
			//Le aumentamos la distancia entre columnas al llegar a la posicion 13.2
			Vector3 posicionTemporal = this.transform.position + distanciaEntreColumnas;
			//Cambiamos el lugar en Y por uno random
			posicionTemporal.y = Random.Range (-3f, 0.6f);
			//Movemos a los tubos a esa posicion
			this.transform.position = posicionTemporal;
			sumarPuntaje = true;
		}
		//Sumamos una vez cuando los tubos pasan al pajaro
		if (this.transform.position.x <= -12.8&sumarPuntaje==true)
		{
			sumarPuntaje = false;
			int puntos = int.Parse(puntaje.text)+1;
			puntaje.text = puntos.ToString();
		}
	}
}

Suerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
28 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
José

Buenas julio estoy siguiendo tus totoriales haces un excelente trabajo, aun soy novato en esto y mi flappy tiene dos errores el 1ero es que sigue buscando petroleo jajaja y el otro es quue cuando activo el GUIText al momento de darle start al juego que arranca el marcador del puntaje desaparece como si no se cargara o algo asi no entiendo. Gracias saludos

Gustavo Bermudez

Julio, tengo el mismo problema que tino… sera que ya has probado el como hacer el GUI Text en el nuevo Unity?

Tino Clemente

Muchísimas gracias Julio Cesar! 😀 Sos un genio!!
Ahora tengo otro problemilla, que se debe a mi versión de Unity supongo.
Cuando vos ponés “GUI Text”, en mi Unity tengo que ir a GameObject/UI/Text. Este tipo de texto no me lo reconoce para arrastrarlo a la casilla de TuboScript, tengo la última versión de Unity en versión de prueba.

Tino Clemente

No hay problema, muchas gracias! Me has ayudado mucho ya

Tino Clemente

Hola Jullio Cesar! Tengo un problema, he terminado este tutorial, pero mi flappy aún sigue teniendo dos errores:
Cuando choco el piso sin haber chocao nada todavía la escena sigue moviendose, hasta que choco un tubo y se detiene.
Mi Flappy sigue metiéndose en el piso luego de un momento después de haberlo chocado, se buguea.
Quiero aclarar que ya puse mis scripts iguales a los tuyos.

Naen

bueno, ya lo hice, tuve que ver los manuales de Unity3d, no me iba a quedar con los brazos cruzados jejeje… gracias

Naen

Buenas. todo va bien solo que en este paso al tratar de agregar el trigger pajarito muriendo veo una nueva pestaña “Animator” y esa no la puedo agregar, me podrian hechar una manito, gracias.

Adrian

Si, que no se caiga, que se quede estático en el punto de colisión. Por cierto como le haces para pasar la aplicación al móvil, para probarla y eso.

Adrian

Y si quisiera detener a flappy en el punto donde colisiona como tendría que hacerle?

ChristianCes

ya aprendi pues te dejo el dato por si lo necesitas
(JavaScript)
var style : GUIStyle
function OnGUI(){
GUI.skin.Box= style;
}
Suerte gracias

ChristianCes

aah y sabes como cambiar la skin de los GUI?

ChristianCes

ya se soluciono, gracias Julio 😀 …ya subiste mas juegos?

ChristianCes

ya lo he hecho, pero me aparece la pantalla azul y se queda ahi T-T

ChristianCes

Hola Julio, yo denuevo, tengo un inconveniente:
He hecho un juego para android , pero cuando lo paso a mi tablet no sirve, trate de pasarlo al pc con controles de pc pero tampoco sirve, cuando lo incio me manda un pantallazo azul y se queda ahi, quiza sabes que es gracias 😀
ya le he hecho el build y todo, pero pasa lo mismo con todos mis proyectos
Gracias