Пишу код для спауна объектов в рандомном положении по оси 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);
}
}