Как остановить сопрограмму, если флаг bool имеет значение false, и перезапустить ее, если значение true в обновлении?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как остановить сопрограмму, если флаг bool имеет значение false, и перезапустить ее, если значение true в обновлении?

Сообщение Anonymous »

теперь это не влияет на сопрограмму. когда я запускаю игру, и флаг 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»