private IEnumerator Spawn()
{
yield return new WaitForSeconds(2f);
while (fruitsSpawned != numberOfFruits)
{
GameObject prefab = fruitPrefabs[Random.Range(0, fruitPrefabs.Length)];
Vector3 position = new Vector3();
position.x = Random.Range(spawnArea.bounds.min.x, spawnArea.bounds.max.x);
position.y = Random.Range(spawnArea.bounds.min.y, spawnArea.bounds.max.y);
position.z = Random.Range(spawnArea.bounds.min.z, spawnArea.bounds.max.z);
//Diagnoal spawning
Quaternion rotation = Quaternion.Euler(0f, 0f, Random.Range(minAngle, maxAngle));
GameObject fruit = Instantiate(prefab, position, rotation);
float force = Random.Range(minForce, maxForce);
fruit.GetComponent<Rigidbody>().AddForce(fruit.transform.up * force, ForceMode.Impulse);
//Stop objects that have been cut
if (fruit.tag == "Sliced")
{
Destroy(fruit, maxLifetime);
}
fruitsSpawned++;
yield return new WaitForSeconds(Random.Range(minSpawnDelay, maxSpawnDelay));
}
}
所以我已经在我的项目上工作了一段时间,我觉得我的思维已经锁定了,所以一些帮助会非常好。
这是一个生成水果的spawner,当我切片水果时(点击它)标签变成“切片”。
我的问题是如何才能生成水果仅当标签已更改时。
首先,你不应该在生成水果的代码中编写涉及销毁水果的代码,这直接违反了SOLID
-> 将代码片段移至 GameManager 类
其次,关于你的问题,我认为你的意图是只有当玩家切了至少一个水果时才会产生新的水果,对吗?
-> 如果我是对的,那么在上面的 GameManager 类中添加一个 watcher 变量,即: