Hola gente! Feliz navidad! ¿Les trajo sus regalos papa Noel? yo he pedido una nueva computadora de escritorio de última generación 🙂 aunque viene con delay ese regalo y es que ahora papa Noel ya no está en el polo Norte, está en China, ¿qué se puede hacer?, ahora ni los duendes compiten con el gigante asiático, en fin.
Hoy les llego con un tercer video tutorial de Unity 2D con lo que muchos esperaban, esta vez nuestro cohete va a poder disparar con todo contra sus enemigos 🙂 es un poco amplio el video porque hay que dedicarle un poco más de tiempo al código e intento explicarlo de una forma entendible ya que es un poquito confuso.
He encontrado algunos bugs en esta versión de unity 4.3, las herramientas nativas 2D a veces producen fallos inesperados pero nada demasiado grave, aún así siempre es bueno ir grabando 😉 más abajo está el código del video.
Este es el código de DisparoScript
using UnityEngine; using System.Collections; /// <summary> /// Comportamiento del disparo /// </summary> public class DisparoScript : MonoBehaviour { /// <summary> /// Daño inflingido /// </summary> public int danho = 1; /// <summary> /// El disparo es del jugador o del enemigo? /// </summary> public bool esDisparoEnemigo = false; void Start() { // Que desaparezca el objeto disparo despues de un tiempo definido Destroy(gameObject, 20); // 20 segundos } }
Este es el código de SaludScript
using UnityEngine; using System.Collections; /// <summary> /// Comportamiento de la salud de los objetos /// </summary> public class SaludScript : MonoBehaviour { /// <summary> /// Numero de puntos de salud /// </summary> public int ps = 2; /// <summary> /// Es jugador o enemigo? /// </summary> public bool esEnemigo = true; void OnTriggerEnter2D(Collider2D collider) { //Es un disparo? DisparoScript disparo = collider.gameObject.GetComponent<DisparoScript>(); if (disparo != null) { // Revisamos si es enemigo o compañero if (disparo.esDisparoEnemigo != esEnemigo) { ps -= disparo.danho; // Destruimos el disparo // No coloquen solo Destroy() //sino eliminaran el Script Destroy(disparo.gameObject); if (ps <= 0) { // Muerto! Destroy(gameObject); } } } } }
Este es el código de ArmaScript
using UnityEngine; using System.Collections; /// <summary> /// Comportamiento del arma /// </summary> public class ArmaScript : MonoBehaviour { /// <summary> /// Componente transform del disparo /// </summary> public Transform disparoReutilizado; /// <summary> /// Esperaremos un tiempo entre un disparo y otro para generarse /// </summary> public float tiempoEsperaDisparos = 0.25f; //-------------------------------- // Tiempo de espera //-------------------------------- private float tiempoEntreDisparos; void Start() { tiempoEntreDisparos = 0f; } void Update() { if (tiempoEntreDisparos > 0) { tiempoEntreDisparos -= Time.deltaTime; } } //-------------------------------- // Disparando desde otro Script //-------------------------------- /// <summary> /// Crear un nuevo disparo de ser posible /// </summary> public void Ataque(bool esEnemigo) { if (PuedeAtacar) { tiempoEntreDisparos = tiempoEsperaDisparos; // Traemos el componente Transform del DisparoReutilizado var disparoTransform = Instantiate(disparoReutilizado) as Transform; // Asignamos una posicion disparoTransform.position = transform.position; // Vemos si es fuego enemigo DisparoScript disparo = disparoTransform.gameObject.GetComponent<DisparoScript>(); if (disparo != null) { disparo.esDisparoEnemigo = esEnemigo; } // Hacemos que se mueva siempre a la derecha MovimientoScript movimiento = disparoTransform.gameObject.GetComponent<MovimientoScript>(); if (movimiento != null) { movimiento.direccion = this.transform.right; } } } /// <summary> /// Listo para lanzar un nuevo disparo? /// </summary> public bool PuedeAtacar { get { return tiempoEntreDisparos <= 0f; } } }
Este es el código de update de coheteScript
... // diparando bool disparo = Input.GetButtonDown("Fire1"); disparo |= Input.GetButtonDown("Fire2"); if (disparo) { ArmaScript arma = GetComponent<ArmaScript>(); if (arma != null) { // Falso porque el jugador no es el enemigo arma.Ataque(false); } }
Suerte!
hola julio están muy buenos tus vídeo pero tengo una pequeña duda espero puedas ayudarme al momento de crearse el objeto bala se crea muy lejos y muy abajo del cohete al mover el cohete si cambia de posición al bala pero siempre muy lejos y mu abajo agradecería mucho tu ayuda, gracias.
Hola como te comentaba en el vídeo, tienes que cambiar y utilizar localposition, no position, que se calcula de acuerdo a la posicion del padre
¿Por qué puede darme error al declarar los Vector2?
Si puedes, escribe aquí lo que te parece en console para averiguarlo 🙂
Faltó el código de MovimientoScript.
Están buenos los tutoriales buena suerte (:
Es que MovimientoScript es copiar y pegar del nubeScript, me parecio redundante volverlo a poner 🙂 Gracias por las buenas vibras
Como hago para que los ps se muestren en pantalla?
Puedes usar Fonts, o dibujarlos tu mismo, eso todavía no lo he enseñado y tampoco lo he averiguado 😛
Hola! 🙂
Muy interesantes tus videos de Unity. Es bueno probar nuevas herramientas de desarrollo. En un principio, al buscar información sobre la programación de juegos en Android, me había encontrado con muchas herramientas y frameworks (Gamemaker, AndEngine,cocos2d, Libgdx, etc.). Al final me quedé con Libgdx. Pero no descarto otras posibilidades. Creo que lo importante es buscar un equilibrio entre versatilidad, facilidad de uso y rapidez en el desarrollo…y si es gratis mejor…
¡Feliz Año Nuevo! 🙂
Muy cierto ^_^ Feliz año nuevo!