теперь это не влияет на сопрограмму. когда я запускаю игру, и флаг bool spawn имеет значение false или true, если я меняю его во время выполнения, это не меняет сопрограмму. если сопрограмма уже работает, она не остановит ее, а если она не работает, она не запустит ее.
Я пытался использовать для этого oldSpawn, но, возможно, это неправильный способ ее использования. ?
using System.Collections;
using UnityEngine;
using UnityEngine.PlayerLoop;
public class SpawnObjects : MonoBehaviour
{
[Header("Prefabs To Spawn")]
public GameObject prefabToSpawn;
[Header("Terrain Settings")]
public Terrain terrain;
public GameObject spawnedTerrainObjectsParent;
[Header("Spawn Settings")]
public bool spawn = false;
public int numberOfObjects = 100;
public float duration = 1.0f;
public float yOffset = 0.5f;
public bool isParent = true;
private float terrainWidth, terrainLength;
private float xTerrainPos, zTerrainPos;
private float yValTerrain, randXTerrain, randZTerrain;
private bool oldSpawn;
void Awake()
{
oldSpawn = spawn;
if (terrain != null)
{
terrainWidth = terrain.terrainData.size.x;
terrainLength = terrain.terrainData.size.z;
xTerrainPos = terrain.transform.position.x;
zTerrainPos = terrain.transform.position.z;
if (isParent && spawnedTerrainObjectsParent == null)
{
spawnedTerrainObjectsParent = new GameObject("Spawned Terrain Parent");
}
}
if(spawn)
{
StartCoroutine(Generate());
}
}
private void Update()
{
if(oldSpawn != spawn)
{
if(spawn)
{
StopCoroutine(Generate());
StartCoroutine(Generate());
}
else
{
StopCoroutine(Generate());
}
oldSpawn = spawn;
}
}
private IEnumerator Generate()
{
for (int i = 0; i < numberOfObjects; i++)
{
randXTerrain = UnityEngine.Random.Range(xTerrainPos, xTerrainPos + terrainWidth);
randZTerrain = UnityEngine.Random.Range(zTerrainPos, zTerrainPos + terrainLength);
yValTerrain = terrain.SampleHeight(new Vector3(randXTerrain, 0, randZTerrain)) + yOffset;
GameObject objInstance = Instantiate(prefabToSpawn, new Vector3(randXTerrain, yValTerrain, randZTerrain), Quaternion.identity, spawnedTerrainObjectsParent.transform);
objInstance.name = "Terrain Spawned";
yield return new WaitForSeconds(duration);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... en-true-in
Как остановить сопрограмму, если флаг bool имеет значение false, и перезапустить ее, если значение true в обновлении? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение