Single Tech Games

flappy bird unity 2d 5

Un Flappy Bird con C# en Unity 2D parte 8 (Actualización para Unity 5.0)

Hola Gente! Me desaparecí unos días 😛 quise darme un pequeño break pero regreso con un nuevo vídeo, aunque se puede decir que es la actualización de uno muy visto, y es que por fin continuo con el Flappy Bird y lo llevo a la versión 5.

Cambios que hice: Solo en el Menú UI el resto no ha cambiado para nada es el mismo código para las versiones anteriores y la nueva Unity 5.
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
	//1,1,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;
	public TubosScript tubo1;
	public TubosScript tubo2;
	private Animator anim;
	private bool juegoTerminado;
	private bool juegoIniciado;
	public RectTransform botonesMenu;
	// Use this for initialization
	void Start () {
		anim = this.gameObject.GetComponent<Animator> ();
	}
	// Update is called once per frame
	void Update (){
		//aumenta con el numero de presiones en la pantalla
		int numPresiones = 0;
		foreach (Touch toque in Input.touches) {
			if (toque.phase == TouchPhase.Ended)
				numPresiones++;
		}
		//Si la persona presiona el boton de espacio o hace clic en la pantalla con el mouse, o tocas con el dedo
		if (Input.GetKeyDown(KeyCode.Space) | Input.GetMouseButtonDown(0) | numPresiones > 0) {
			if(juegoTerminado == false)
				aleteo = true;
			juegoIniciado = true;
			tubo1.juegoIniciado = true;
			tubo2.juegoIniciado = true;
		}
		if(juegoTerminado)
			MostrarBotones();
	}
	//Este es el update de la fisica, que es ligeramente mas lento que el update del juego
	void FixedUpdate () {
		if(juegoIniciado)
		{
			//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)
	{
		//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);
			anim.SetTrigger("JuegoTerminado");
			juegoTerminado = true;
		}
		if(colision.gameObject.name == "Piso")
		{
			gravedad = new Vector3(0,0,0);
		}
		if(colision.gameObject.name == "TuboAbajo")
		{
			colision.gameObject.GetComponent<BoxCollider2D>().enabled = false;
		}
	}
	private void MostrarBotones()
	{
		botonesMenu.gameObject.SetActive(true);
	}
}

ManejadorBotonesScript

using UnityEngine;
using System.Collections;
public class ManejadorBotonesScript : MonoBehaviour {
	public void BotonReiniciar()
	{
		Application.LoadLevel("escena1");
	}
	public void BotonLogin()
	{
	}
	public void BotonPuntajes()
	{
	}
	public void BotonInterestitial()
	{
		//				admob.ShowInterstitial();
		//				admob.HideBanner();
	}
}

Suerte!

0 0 votes
Article Rating
Subscribe
Notify of
guest
5 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Omar Ramírez

Hola Julio!
Recién encontré tu blog y todo es muy interesante para mi! Felicidades por todo tu trabajo!
Tengo un par de preguntas. Entiendo que si uno utiliza Unity gratuitamente entonces necesariamente al bajar e instalar la app en tu telefono aparecerá el icono de Unity. Es posible cambiar esto gratuitamente? Me parece que el icono de Unity aparece al abrir la aplicacion “Made with Unity”. Yo no me refiero al abrirlo, si no mas bien el pequeño icono para presionar y entrar a la app.

Daniel

Hola Julio nuevamente!
Tenía una duda de rendimiento.
Recientemente he acabad este tutorial, y va perfecto desde el propio motor Unity. Pero si lo pongo en mi android el pájaro no responde con la misma precisión que lo hace en el ordenador. Porque? a parte que no responde igual desde que pulso a la pantalla hasta que el pájaro reacciona pasan unos mili-segundos que se llegan a apreciar.
Esto a qué es debido? y como le pongo un solución correcta?
Gracias!

Daniel

Hola Julio!
1r felicidades por tu web! la verdad hace unos días que la encontré y me ha enganchado! jaja
Queria preguntarte el tema de licencias:
Si haces un juego gratuito con publicidad incorporada, se necesita pagar la licencia de Unity para publicarlo?
Ya que bueno estas sacando un beneficio, y la gente que recién empieza pagar tal cantidad de dinero es un poco suicidio.
Yo hasta ahora estaba usando el framework gratuito Cocos2d…pero me intriga saber como va lo de la licencia!
Gracias 😀