Пишу код для спауна объектов в рандомном положении по оси Y в 2D проекте UNITY , но объекты не начинают получаться

public Transform spawnID;
    [SerializeField] Vector2 range;
    [SerializeField] GameObject enemy;
    void Start()
    {
        StartCoroutine((IEnumerator)Spawn());**        //Эта переменная не хочет быть просто Spawn, пришлось добавить (IEnumerator) без этого выдавало ошибку, или хотела быть "str".
    **}
    IEnumerable Spawn()
    {
        yield return new WaitForSeconds(1);
        Vector2 pos = spawnID.position + new Vector3(0, Random.Range(-range.y, range.y));
        Instantiate(enemy, pos, Quaternion.identity);
        Repeat();
    }
   
    void Repeat()
    {
        StartCoroutine((IEnumerator)Spawn());           //Эта аналогично, просто быть "Spawn" не хочет.
    }

Написал такую программу для появления объектов, ошибок не выдаёт, но блоки не начинают появляться, пожалуйста помогите.


Ответы (1 шт):

Автор решения: Yaroslav

IEnumerator и IEnumerable не одно и то-же.

public class ObjectSpawner : MonoBehaviour
{
    [SerializeField] private float _delay = 2;
    [SerializeField] private Vector2 _area = new Vector2(4, 2);
    [Space]
    [SerializeField] private GameObject _template;
    [Space]
    [SerializeField] private bool _autoStart = true;
    private Transform _targetPoint;

    private void Start ()
    {
        _targetPoint = transform;            
        if (_autoStart)
            StartSpawn();
    }

    private void OnDrawGizmosSelected ()
    {
        Gizmos.color = new Color(0, 1, 0, 0.25f);
        Gizmos.DrawCube(transform.position, _area);
    }
    
    public void StartSpawn ()
    {
        StartCoroutine(SpawnCoroutine());
    }

    public void StopSpawn ()
    {
        StopAllCoroutines();
    }

    private IEnumerator SpawnCoroutine ()
    {
        while (true)
        {
            yield return new WaitForSeconds(_delay);
            Spawn();
        }
    }

    private void Spawn ()
    {
        Instantiate(_template, GetPosition(), Quaternion.identity);
    }

    private Vector3 GetPosition ()
    {
        float x = _targetPoint.position.x-Random.Range(-_area.x, _area.x)*0.5f;
        float y = _targetPoint.position.y-Random.Range(-_area.y, _area.y)*0.5f;
        return new Vector3(x, y, _targetPoint.position.z);
    }
}
→ Ссылка