I created an Enemy with various components and 1 children i make it a prefab, and a want to use it several times around the scene, but when there are more than 1, only 1 work correctly. this script its attached to the prefab.
public class fireBullet : MonoBehaviour {
GameObject Fireposition;
GameObject enemyBody;
public Transform rager;
Transform enemy;
public PoderControl poderControl;
float distance;
float weaponEnemy;
float AddForceX,AddForceY;
public int enemyLife;
void Start () {
Fireposition = GameObject.FindGameObjectWithTag("fire");
enemy = GetComponent ();
enemyBody = GameObject.FindGameObjectWithTag("enemy");
AddForceX = 0f;
AddForceY = 0f;
enemyLife = 300;
}
void FixedUpdate()
{
MoveEnemy ();
ChequearPosicionRager ();
StartCoroutine (ShootBullet (AddForceX, AddForceY));
DestroyEnemy ();
}
IEnumerator ShootBullet(float AddForceX,float AddForceY)
{
distance = Vector2.Distance (rager.transform.position, Fireposition.transform.position);
if (distance < 12f) {
if (Time.time > weaponEnemy + 0.5f) {
weaponEnemy = Time.time;
GameObject bulletinstance;
bulletinstance = Instantiate (Resources.Load("Bullet"), Fireposition.transform.position, Fireposition.transform.rotation) as GameObject;
bulletinstance.rigidbody2D.AddForce (new Vector2 (AddForceX, AddForceY));
Destroy (bulletinstance, 1f);
}
}
yield return new WaitForSeconds (3f);
}
void MoveEnemy()
{
Vector3 dir = rager.transform.position - enemy.position;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
enemy.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
}
void ChequearPosicionRager()
{
if (rager.position.x < enemy.position.x && rager.position.y < enemy.position.y) {
AddForceX = -100f;
AddForceY = -50f;
}
if (rager.position.x < enemy.position.x && rager.position.y > enemy.position.y) {
AddForceX = -100f;
AddForceY = 50f;
}
if (rager.position.x > enemy.position.x && rager.position.y > enemy.position.y) {
AddForceX = 100f;
AddForceY = 50f;
}
if (rager.position.x > enemy.position.x && rager.position.y < enemy.position.y) {
AddForceX = 100f;
AddForceY = -50f;
}
}
void OnTriggerExit2D(Collider2D poder)
{
if (poder.gameObject.tag == "poder")
enemyLife -= 25;
}
void DestroyEnemy()
{
if (enemyLife<=0)
enemyBody.SetActive (false);
}
}
↧