You need to enable JavaScript to run this app. Unity 2D如何实现玩家死亡动画播放完毕后再显示游戏结束界面
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D如何实现玩家死亡动画播放完毕后再显示游戏结束界面

Unity 2D死亡动画播放完毕后显示游戏结束界面的实现方案

Unity原生完全支持该需求,同时也有多种替代方案可以实现对应效果,具体实现方法如下:


原生内置功能实现

方法1:Animation事件(最推荐)

这是Unity官方提供的原生动画回调功能,实现成本最低、稳定性最高:

  1. 选中玩家对象,打开Animation窗口,找到对应的死亡动画剪辑
  2. 将时间轴拖动到死亡动画的最后一帧,点击时间轴上方的「添加事件」按钮
  3. 在事件的Inspector面板中,将触发函数绑定到玩家脚本内的UI显示方法即可
    配套代码示例:
using UnityEngine;
using System.Collections;

public class PlayerHealth : MonoBehaviour
{
    // 提前在Inspector中赋值游戏结束UI对象
    public GameObject gameOverUI;
    private Animator playerAnimator;
    private bool isDead = false;

    void Start()
    {
        playerAnimator = GetComponent<Animator>();
    }

    // 玩家生命值归0时调用该方法触发死亡流程
    public void TriggerDeath()
    {
        if(isDead) return;
        isDead = true;
        // 禁用玩家移动、碰撞等存活逻辑
        GetComponent<PlayerMovement>().enabled = false;
        GetComponent<Collider2D>().enabled = false;
        // 触发死亡动画
        playerAnimator.SetTrigger("isDead");
    }

    // 绑定到死亡动画最后一帧事件的回调方法
    public void ShowGameOverInterface()
    {
        gameOverUI.SetActive(true);
    }
}

方法2:监听Animator状态播放进度

通过代码检测死亡动画的播放进度,动画播放完成后触发UI显示,可通过协程实现异步等待,不会阻塞主线程:

// 接上面的TriggerDeath方法修改
public void TriggerDeath()
{
    if(isDead) return;
    isDead = true;
    GetComponent<PlayerMovement>().enabled = false;
    GetComponent<Collider2D>().enabled = false;
    playerAnimator.SetTrigger("isDead");
    StartCoroutine(WaitForDeathAnimationFinish());
}

IEnumerator WaitForDeathAnimationFinish()
{
    // 等待1帧确保Animator完成状态切换
    yield return null;
    // 循环等待死亡动画播放完成(normalizedTime >=1 代表播放完毕)
    while(playerAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f)
    {
        yield return null;
    }
    gameOverUI.SetActive(true);
}

其他替代实现方案

如果没有用Unity原生Animator系统做死亡动画,还可以用以下方案实现:

  • 补间动画回调:如果是用DOTween、LeanTween等补间库制作的死亡动画,直接在补间逻辑后追加OnComplete回调绑定UI显示方法即可
  • 固定时长等待:如果明确知道死亡动画的总时长,可通过协程yield return new WaitForSeconds(动画时长)的方式等待后显示UI,该方案仅适合临时测试用,动画时长修改后需要同步修改代码,维护成本较高

注意事项

  • 使用Animator状态监听时,GetCurrentAnimatorStateInfo的入参是动画层级索引,如果你没有修改过层级默认填0即可,如果死亡动画放在其他层级需要修改为对应层级的索引
  • 死亡动画的状态需要关闭Loop循环,否则动画会一直重复,永远无法触发播放完成逻辑
  • 要提前做好死亡逻辑的锁(比如上面代码的isDead标记),避免死亡逻辑被重复触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:12:04