好吧,我正在Unity中制作一个游戏,我试图在玩家周围随机产生敌人。为了控制产卵的速率,我创建了一个private bool spawnCooldown
变量。然后,出现了控制产卵速率的if {}
语句。原始代码如下:
private bool spawnCooldown;
private void Start
{
spawnCooldown = Time.time;
}
private void Update
{
if (spawnCooldown < Time.time)
{
Instantiate(original, position, rotation);
spawnCooldown = Time.time + 3f;
// Note that original, position and rotation are just placeholders
// and not the actual code.
}
}
这个代码出了什么问题?目前,它只是实例化每个帧更新,而且似乎根本没有测试if语句。
当你也声明它时,你需要在spawner上添加你想要的冷却秒数,E.GspawnCooldown = Time.time + coolDownPeriodInSeconds;
您还需要将spawnCooldown
设置为浮点值,它存储数字。目前,您已将其存储为bool
,它只存储true
或false
值,因此无法在代码中进一步与Time.Time进行比较。
最后,您在if
块中缺少结束}
字符
目前发生的事情是你正在做以下事情:
- 将产卵冷却设置为当前时间
- 对于之后的每一帧,检查新的当前时间是否大于您设置为
spawnCooldown
的旧时间。由于一直都是这样,代码将在生成脚本中运行
如果您将其更改为
private float spawnCooldown;
void Start
{
spawnCooldown = Time.time +3f ;
}
void Update
{
if (spawnCooldown < Time.time)
{
Instantiate(original, position, rotation);
spawnCooldown = Time.time + 3f;
}
//Note that original, position and rotation are just placeholders and not the actual code.
}
然后它工作得很好。
祝Unity好运!
好的,所以我已经用StarshipladDev的答案解决了问题。问题是克隆人在克隆自己,因为我正在实例化游戏对象本身。