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
- Colocamos el fondo y los enemigos con sus correspondientes animaciones en escena.
- Cuando pulsemos sobre cualquiera de los enemigos, debe mostrarse una traza.
- 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" };