You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity调用Instantiate生成敌人异常:生成2个而非预期1个

问题根因
  • 延迟调用逻辑与Update帧执行冲突:你给生成方法设置了0.0005秒的Invoke延迟,在延迟等待的几帧内,time已经满足<=0的条件,且howmuchenemies还未被修改,会连续触发多次Invoke调用,相当于排队了多个生成请求,最终生成多个敌人。
  • 边界判断逻辑错误:你的生成触发条件写的是howmuchenemies >= 0,初始值为1,第一次生成后howmuchenemies减到0,下一次Update判断时条件仍然成立,会再次触发生成,直到第二次生成后数值变为-1才会停止,直接导致多生成1个敌人。
修复方案

直接删除不必要的Invoke延迟调用,同时修正边界判断条件即可,你设置的0.0005秒延迟没有实际业务意义,反而会导致帧判断逻辑混乱。修改后的完整代码如下:

public class enemyspawner : MonoBehaviour
{
    public GameObject enemyeasy;
    public GameObject enemyhard;
    public GameObject enemyinsane;
    public int timer;
    public float time;
    public int howmuchenemies = 1;
    public PlayerMovement pm;
    private int difficulty;

    public void Start()
    {
        difficulty = pm.difficult;
        time = timer;
    }
    public void Update()
    {
        time -= Time.deltaTime;
        // 修正边界判断为howmuchenemies > 0
        if (time <= 0 && howmuchenemies > 0)
        {
            if (difficulty == 1)
            {
                // 直接调用生成方法,去掉Invoke
                spawneasy();
            }
            else if (difficulty == 2)
            {
                spawnhard();
            }
            else if (difficulty == 3)
            {
                spawninsane();
            }
            // 如果只需要生成一波,这里可以加一行time = float.MaxValue; 彻底避免后续重复判断
        }
    }
    public void spawneasy()
    {
        Instantiate(enemyeasy, transform.position, Quaternion.identity);
        howmuchenemies -= 1;
    }
    public void spawnhard()
    {
        howmuchenemies -= 1;
        Instantiate(enemyhard, transform.position, Quaternion.identity);
    }
    public void spawninsane()
    {
        Instantiate(enemyinsane, transform.position, Quaternion.identity);
        howmuchenemies -= 1;
    }
}

额外优化说明:将独立的三个if判断改成else if,避免同一帧内多个难度判断同时命中的极端情况。如果你的需求是仅生成一波敌人,还可以在生成完成后将time设置为一个极大值,彻底避免后续帧重复做无效判断。

内容的提问来源于stack exchange,提问作者kevshoot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:48:03