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

Unity实例数量限制及重复生成问题咨询

解决Unity实例化重复生成的问题

问题根源

你的代码里OnTriggerStay2D会在角色与TorchSword碰撞体接触的每一帧都执行逻辑。当满足isGrounded条件时,会反复设置TorchSwordBool = true,如果后续动画事件(比如PickST动画结束后调用DestroyPlayer)没做单次执行限制,就会导致多次触发实例化逻辑,生成多个带剑角色。

修复方案

1. 限制触发逻辑仅执行一次

添加私有布尔变量标记是否已拾取装备,避免OnTriggerStay2D重复触发:

private bool hasPickedUpTorchSword = false; // 新增标记变量

void OnTriggerStay2D(Collider2D Coll)
{
    if(Coll.gameObject.tag == "TorchSword" && isGrounded && !hasPickedUpTorchSword)
    {
        hasPickedUpTorchSword = true; // 标记为已拾取
        TorchSwordBool = true;
        sprite.flipX = false;
        rb.constraints = RigidbodyConstraints2D.FreezePosition;
        transform.position = TorchSword.position;
    }
}

2. 确保实例化逻辑仅执行一次

修改DestroyPlayer方法,添加双重保险防止重复调用:

void DestroyPlayer()
{
    if(!hasPickedUpTorchSword) return; // 未拾取时直接返回
    Instantiate(CharacterSword, transform.position, Quaternion.identity);
    Destroy(gameObject);
}

3. 检查动画事件设置

如果DestroyPlayer是通过动画片段的事件调用的,打开动画编辑器确认:

  • PickST动画片段仅添加了一次DestroyPlayer事件
  • 动画未设置为循环播放,避免重复触发事件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:23:14