В следующем видео показана вся проблема:
Вот как враги появляются в функции или в сопрограмме с помощью "roomSpawnerScript.Spawnear()" перед возвратом доходности:
Вот как враги появляются в сопрограмме после возврата доходности:
КОД:
Пустой объект столкновения:
Код: Выделить всё
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Player")
{
StartCoroutine(Siguiente());
}
}
private IEnumerator Siguiente()
{
Color newColor = Color.clear;
while (BlackScreen.GetComponent().color.a < 1)
{
newColor.a += 0.01f;
BlackScreen.GetComponent().color = newColor;
yield return null;
}
scrRoomSpawner roomSpawnerScript = roomSpawner.GetComponent();
foreach (GameObject instancia in roomSpawnerScript.instancias)
{
Destroy(instancia);
}
roomSpawnerScript.Spawnear();
player.transform.position = playerSpawnPos;
yield return new WaitForSeconds(1);
while (BlackScreen.GetComponent().color.a > 0)
{
newColor.a -= 0.01f;
BlackScreen.GetComponent().color = newColor;
yield return null;
}
}
Код: Выделить всё
public class scrRoomSpawner : MonoBehaviour
{
//Variables
public float gridWidth;
public float gridHeight;
public float objectNumber;
public float enemyNumber;
//Objetos
public GameObject bloque;
public GameObject enemy;
public GameObject enviroment;
public GameObject aa;
private List gridObjetos = new List();
private List gridEnemigos = new List();
public List instancias = new List();
// Start is called before the first frame update
void Start()
{
Spawnear();
}
// Update is called once per frame
void Update()
{
}
public void Spawnear()
{
gridObjetos.Clear();
gridEnemigos.Clear();
//Crear grid objetos
for (int x = 0; x < gridWidth; x++)
{
for (int y = 0; y < gridHeight; y++)
{
gridObjetos.Add(new Vector2(x - 7.5f, y - 5.5f));
}
}
//Crear grid enemigos
for (int x = 0; x < gridWidth; x++)
{
for (int y = 0; y < gridHeight; y++)
{
gridEnemigos.Add(new Vector2(x - 7.5f, y - 5.5f));
}
}
//Spawnear objetos
for (int i = 0; i < objectNumber; i++)
{
if (gridObjetos.Count > 0)
{
GameObject objeto = Instantiate(bloque);
objeto.transform.SetParent(enviroment.transform);
instancias.Add(objeto);
objeto.transform.position = gridObjetos[Random.Range(0, gridObjetos.Count)];
Vector2 vectorObjeto = objeto.transform.position;
Vector2 minBound = vectorObjeto - new Vector2(1, 1);
Vector2 maxBound = vectorObjeto + new Vector2(1, 1);
gridObjetos.RemoveAll(v => v.x >= minBound.x && v.x = minBound.y && v.y
Подробнее здесь: [url]https://stackoverflow.com/questions/79055706/function-works-but-coroutine-doesn%c2%b4t[/url]
Мобильная версия