Unity3D给了我意想不到的输出:实例化对象的速率太高



好吧,我正在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,它只存储truefalse值,因此无法在代码中进一步与Time.Time进行比较。

最后,您在if块中缺少结束}字符

目前发生的事情是你正在做以下事情:

  1. 将产卵冷却设置为当前时间
  2. 对于之后的每一帧,检查新的当前时间是否大于您设置为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的答案解决了问题。问题是克隆人在克隆自己,因为我正在实例化游戏对象本身。

最新更新