Galería de tiro con Unity3D

Curso de Unity 3D

21.  
40.  

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Primer paso – todo lo que ya vimos

  1. Colocamos el fondo y los enemigos con sus correspondientes animaciones en escena.
  2. Cuando pulsemos sobre cualquiera de los enemigos, debe mostrarse una traza.
  3. Finalmente, cambiaremos la traza por una animación de explosión.

Un único animal se mueve desde su posición a la parte izquierda de la pantalla

Tener en cuenta que si al GameObject le añadimos un RigidBody, evitaremos el recalculamiento constante del BoxCollider durante su movimiento, por tanto, es recomendable.

Vector.Lerp hace una traslación desde un punto inicial hasta otro final. Cuando el t vale 0, el objeto estará en PosIni, cuando t vale 1, el objeto estará en PosFin y cuando t tiene cualquier valor intermedio entre 0 y 1, el objeto estará en algún punto intermedio proporcional

Enemy.cs

public class Enemy : MonoBehaviour{
  Vector2 posInit;
  Vector2 posEnd;
  float time;
  void Start(){
    posInit = transform.position;
    posEnd = new Vector2(Utils.GetLeftSide(), transform.position.y);
  }

  private void Update(){
    time += 0.1f * Time.deltaTime;
    transform.position =Vector2.Lerp(posInit, posEnd, time);
  }
}

Utils.cs

public class Utils: MonoBehaviour{
  public static float GetLeftSide(){
    return Camera.main.ScreenToWorldPoint(Vector2.zero).x;
  }

  public static float GetRightSide(){
    return Camera.main.ScreenToWorldPoint(new Vector2(Screen.width, 0)).x;
  }
}

Un enemigo es instanciado en una posición de y aleatoria

Instantiate(orugaPrefab, new Vector3(Utils.GetRightSide(), Random.Range(Utils.Get0Height(), Utils.GetScreenHeight())), Quaternion.identity);

Un enemigo es instanciado a cada segundo

El enemigo es instanciado a la izquierda o derecha de la pantalla de manera aleatoria

El Animal debe moverse correctamente hacia la direccion contraria a la que fue instanciado

El animal debe mirar en la dirección de desplazamiento

Destruir al enemigo

public static float GetAnimationClipTime(Animator animator, string animationName){
    float time = 0;
    RuntimeAnimatorController ac = animator.runtimeAnimatorController;    
    for (int i = 0; i < ac.animationClips.Length; i++){
      if (ac.animationClips[i].name == animationName){
        time = ac.animationClips[i].length;
        return time;
      }
    }
    return time;
  }

Generar una avispa, una oruga o una hormiga aleatoriamente

Una opción para hacer esto sería crear un prefab para cada tipo de enemigo. Sin embargo, también podemos crear una animación para cada tipo de enemigo y escoger una de estas animaciones aleatoriamente.

string[] animName = new string[] { "OrugaWalking", "HormigaWalking", "AvispaFlying" };

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.