Single Tech Games

Tutorial en español de Unity 2D #3 (Versión 4.3)

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!

0 0 votes
Article Rating
Subscribe
Notify of
guest
10 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
santiago

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.

ruper1991

¿Por qué puede darme error al declarar los Vector2?

CK

Faltó el código de MovimientoScript.
Están buenos los tutoriales buena suerte (:

superzuman

Como hago para que los ps se muestren en pantalla?

Atlantis Road

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! 🙂