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
相关产品推荐
相关产品推荐

