UnityProjekt/Assets/Scripts/EnemySpawner.cs

46 lines
No EOL
1.4 KiB
C#

using System;
using UnityEngine;
using Random = System.Random;
public class EnemySpawner : MonoBehaviour
{
public Transform spawnPos;
public float timeBetweenSpawns;
public short maxEnemyCount;
public GameObject enemyPrefab;
public Transform target;
private Vector3 _diff;
private float _lastSpawn;
private readonly Random _random = new Random();
private ObjectPool _pool;
private void Start()
{
_diff = spawnPos.position - transform.position;
enemyPrefab.GetComponent<EnemyController>().target = target;
_pool = new ObjectPool(enemyPrefab.gameObject, 10);
}
private void FixedUpdate()
{
if (Time.fixedTime - _lastSpawn > timeBetweenSpawns && _random.Next(2) == 1)
{
short count = (short) _random.Next(maxEnemyCount);
for (int i = 0; i < count; i++)
{
var pos = transform.position + _diff;
var enemy = _pool.GetObject(true);
if (enemy is null) break;
enemy.transform.position = new Vector3(pos.x, spawnPos.position.y, pos.z);
var rb = enemy.GetComponent<Rigidbody2D>();
rb.mass = 1f;
rb.gravityScale = 1f;
rb.rotation = 0f;
rb.freezeRotation = true;
enemy.SetActive(true);
rb.rotation = 0f;
}
_lastSpawn = Time.fixedTime;
}
}
}