Unity3D中如何实现玩家离开碰撞盒子时停止Push动画?
解决Push动画无法停止的问题
你当前仅实现了碰撞触发时启动动画的逻辑,缺少碰撞结束时停止动画的处理,以下是两种可行的解决方式:
基础方案(单盒子场景)
添加OnCollisionExit2D方法,当玩家离开盒子碰撞体时,将动画控制布尔值设为false:
private Animator anim; void Start() { anim = GetComponent<Animator>(); } void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.CompareTag("box")) { anim.SetBool("Push", true); } } void OnCollisionExit2D(Collision2D other) { if (other.gameObject.CompareTag("box")) { anim.SetBool("Push", false); } }
进阶方案(多盒子场景)
如果场景存在多个盒子,用计数器避免玩家同时触碰多个盒子时,离开其中一个就错误停止动画的问题:
private Animator anim; private int boxCollisionCount = 0; void Start() { anim = GetComponent<Animator>(); } void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.CompareTag("box")) { boxCollisionCount++; anim.SetBool("Push", boxCollisionCount > 0); } } void OnCollisionExit2D(Collision2D other) { if (other.gameObject.CompareTag("box")) { boxCollisionCount = Mathf.Max(0, boxCollisionCount - 1); anim.SetBool("Push", boxCollisionCount > 0); } }
额外检查项
- 确认Animator面板中,从Push动画回到默认状态的过渡条件已设置为
Push布尔值等于false; - 检查盒子的碰撞体是否启用,玩家对象是否挂载
Rigidbody2D(2D碰撞检测要求双方至少一个带有刚体组件)。
相关面板及场景截图:


内容的提问来源于stack exchange,提问作者neptune
相关产品推荐
相关产品推荐

