пытаюсь решить проблему уже долго,место одного обьекта у меня спавняться по два ,вот скрипт: using System.Collections; using System.Collections.Generic; using UnityEngine; public class spawner : MonoBehaviour { public Transform SpawnPos; public GameObject Cube; void Start() { StartCoroutine(SpawnCD()); } void Repeat() { StartCoroutine(SpawnCD()); } IEnumerator SpawnCD() { Vector2 pos = new Vector2(Random.Range(-6.87f, 6.74f), Random.Range(3.62f, 3.63f)); yield return new WaitForSeconds(1.0f); Instantiate(Cube, pos, Quaternion.identity); Repeat(); } } че делать?
Maxim1x, Проблема заключается в том, что метод Repeat() вызывается дважды: в методе Start() и внутри корутины SpawnCD(). Это приводит к тому, что каждый раз, когда корутина SpawnCD() вызывает метод Repeat(), он запускает еще одну корутину, которая будет создавать дополнительные кубы. Для исправления этой проблемы необходимо удалить вызов Repeat() из метода Start(), и оставить его только внутри корутины SpawnCD(). Вот исправленный код: using System.Collections; using System.Collections.Generic; using UnityEngine; public class spawner : MonoBehaviour { public Transform SpawnPos; public GameObject Cube; void Start() { StartCoroutine(SpawnCD()); } IEnumerator SpawnCD() { Vector2 pos = new Vector2(Random.Range(-6.87f, 6.74f), Random.Range(3.62f, 3.63f)); yield return new WaitForSeconds(1.0f); Instantiate(Cube, pos, Quaternion.identity); Repeat(); } void Repeat() { StartCoroutine(SpawnCD()); } } Теперь метод Repeat() будет вызываться только после задержки в 1 секунду внутри корутины SpawnCD(), и не будет вызываться из метода Start(). Это позволит создавать только один куб за раз.