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

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碰撞检测要求双方至少一个带有刚体组件)。

相关面板及场景截图:
Animator面板截图
玩家与盒子场景截图
盒子Inspector面板截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:55:30