I’m fairly new to Unity and I’m trying to make my first game. I’ve created an enemy that moves to a random position every 6 seconds and shoots every 2, and it works fine, but when I add a second one they stop moving. Could you please help me? Thanks in advance! This is the code: (there are some small comments in spanish, sorry about that)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemieMovement : MonoBehaviour
{
ElJugador player;
private float time;
private float timepassed;
private Vector2 movement;
private Vector2 startposition;
private Vector2 desiredDestination;
public static Rigidbody2D rb2d;
public float speed;
public LayerMask whatisenemie;
private bool faceRight = false;
void Start()
{
time = Time.fixedUnscaledTime;
rb2d = GetComponent<Rigidbody2D>();
player = Object.FindObjectOfType<ElJugador>();
}
// Update is called once per frame
void FixedUpdate()
{
timepassed = Time.fixedUnscaledTime - time;
if (timepassed >= 3)
{ startposition = transform.position; //donde empieza a moverse
movement = new Vector2(Random.Range(-5, 5), Random.Range(-5, 5)); //la direccion que seguirá
desiredDestination = movement + startposition; //a que coordenadas querrá ir
time = Time.fixedUnscaledTime; //restart el cronometro
}
if (Mathf.Abs(desiredDestination.x) > 7.5) //si la posicion deseada sale del mapa , se invierte.
{
movement.x = -movement.x;
desiredDestination = movement + startposition;
}
if (Mathf.Abs(desiredDestination.y) > 5)
{
movement.y = -movement.y;
desiredDestination = movement + startposition;
}
if(Physics2D.BoxCast(transform.position, new Vector2(0.45f, 0.9f), 0, movement, movement.magnitude,1 << LayerMask.NameToLayer("ground")))
{
movement = Vector2.zero;
desiredDestination = movement + startposition;
}//mira si puede ir a donde quiere ir
rb2d.velocity = movement.normalized * speed; //el movimiento que hará
Collider2D[] inTheZone = Physics2D.OverlapCircleAll(desiredDestination, 0.5f , whatisenemie); //si llega ala zona destino con un margen de error se frena.
for(int i = 0; i < inTheZone.Length; i++)
{if (inTheZone[i].gameObject.CompareTag("GunEnemie"))
{
rb2d.velocity = Vector2.zero;
}
}
if (player.transform.position.x > transform.position.x && !faceRight)
{
flip();
}
if (player.transform.position.x < transform.position.x && faceRight)
{
flip();
}
}
void flip()
{
faceRight = !faceRight;
transform.Rotate(0, 180, 0);
}
}