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!
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
Lo má sprobale es que el Gui Text este cmabiando de posición al inicio del juego, revisa si en el código no lo estas modificando o lo has puesto dentro de un objeto que se este moviendo en el editor, y lo del petroleo, no recuerdo bien creo que fue un tema con la gravedad, pero hablo de eso en alguno de los vídeos
Julio, tengo el mismo problema que tino… sera que ya has probado el como hacer el GUI Text en el nuevo Unity?
Ya veo que mucha gente anda pidiendo lo mismo, ok la próxima semana tendré un pequeño vídeo Bonus de como hacer que ese Flappy tenga los últimos UI de Unity 🙂
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.
La verdad no he probado todavía la última versión de Unity oficial, menos la que va en prueba, siento no poder ayudarte en esa
No hay problema, muchas gracias! Me has ayudado mucho ya
De nada 🙂
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.
Puede ser que tu error se encuentre aquí if(colision.gameObject.name == “Piso”) yo le coloco Piso porque asi lo coloque en el proyecto pero quizás le pusiste minusculas u otro nombre, dale una mirada a eso, y revisa con los tubos por igual 🙂
bueno, ya lo hice, tuve que ver los manuales de Unity3d, no me iba a quedar con los brazos cruzados jejeje… gracias
Genial! 😀
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.
Si claro, es bastante simple, ve a la barra de menu, donde estan file, edit, assets, etc y busca el que dice window y luego fijate que hay mismo dice Animator 😉
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.
Generas el apk y luego lo copias al celular por usb, y lo instalas como cualquier aplicacion del celular
Y si quisiera detener a flappy en el punto donde colisiona como tendría que hacerle?
Deteerlo en que forma? que no se caiga? pones que la gravedad sea 0 y la velocidad de X y Y tambien sea cero
ya aprendi pues te dejo el dato por si lo necesitas
(JavaScript)
var style : GUIStyle
function OnGUI(){
GUI.skin.Box= style;
}
Suerte gracias
A mira que interesante lo voy a investigar un poco mas gracias por el dato 😉
aah y sabes como cambiar la skin de los GUI?
No eso todavía no sé y la verdad quisiera saber 🙁
ya se soluciono, gracias Julio 😀 …ya subiste mas juegos?
No en eso estoy, sale caliente uno proximamente 😛
ya lo he hecho, pero me aparece la pantalla azul y se queda ahi T-T
mmm que raro, fijate que en tu escena principal, en el start() tengas Application.LoadLevel (“tuescena”); y fijate que no tengas 2 camaras en el juego, luego no se me ocurre que podría ser 🙁
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
No te olvides que la momento de hacer el build tienes que agregar las escenas que has creado, justo antes de hacer el build arriba hay un espacio, hay es donde jalas las escenas de tu juego, por si acaso mira este video https://www.youtube.com/watch?v=bk0JbeTAO3Q