【发布时间】:2017-08-04 16:16:47
【问题描述】:
基本上我已经制作了一个非常简单的游戏,它会掉块,我有基本的 C# 知识,但我自己无法真正弄清楚我将如何去做。基本上,我在中间、左侧和右侧放置了 3 个街区,这是你必须避免的。我制作了一个实例化脚本,在 1 到 4 秒内随机在每个生成位置生成它们,但有时它会意外生成所有 3 个!我只需要检查一下左右是否已经生成了 2,然后不要在中间生成一个,反之亦然。你们能帮帮我吗?谢谢!顺便说一句,这是我当前的生成脚本。
public GameObject spawn;
private float spawnTime;
void Start()
{
spawnTime = Random.Range(1, 5);
Invoke("Spawn", spawnTime);
}
void Spawn()
{
spawnTime = Random.Range(1, 5);
Instantiate(spawn, transform.position, Quaternion.identity);
Invoke("Spawn", spawnTime);
}
编辑:
using UnityEngine;
公共类 randomSpawner : MonoBehaviour {
public GameObject spawn;
private float spawnTime = 1;
void Start()
{
if (GameObject.FindGameObjectsWithTag("Cube").Length < 2)
{
spawnTime = Random.Range(1, 3);
Invoke("Spawn", spawnTime);
}
}
void Spawn()
{
if (GameObject.FindGameObjectsWithTag("Cube").Length < 2)
{
spawnTime = Random.Range(1, 3);
Instantiate(spawn, transform.position, Quaternion.identity);
Invoke("Spawn", spawnTime);
}
}
}
【问题讨论】:
-
这个脚本是否附加到正在生成的块上?
-
@CNuts 不是,但现在我已经将它应用到每个正在生成的 Cube 上,它会在它们掉落时将它们相互叠加生成哈哈。
-
我将在自己生成的立方体中添加一个销毁脚本,如果超过 2 个则将其销毁,也许这会解决问题,我会回复。
-
这确实有效,但我认为你的方法会更好,我弄清楚为什么它不起作用,有一次 Unity 崩溃了,它没有将我的标签保存在我的 Cube 对象上!哈哈哈!但现在实际上它们只生成一次,然后就再也不会生成了。
-
那是因为您需要在 if 语句之外拨打
invoke的电话,就像我在回答中给出的示例一样。