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

Unity FPS项目:如何强制未播放完成的Hitmarker动画重播?

解决Unity中Hitmarker动画无法连续触发的问题

针对你用Animation组件实现Hitmarker时,快速连续命中无法重新触发动画的问题,有几种直接的解决方法:

方法1:使用Animation.Play的重载强制重启动画

Animation.Play()默认不会中断正在播放的同名称动画,你可以使用带PlayMode参数的重载,强制停止同层动画并重新播放:

修改你Shoot方法中的动画调用代码:

if (targetBody != null)
{   
    targetBody.TakeDamageBody(damageBody);
    hitMarkerBodySound.Play(1);
    // 用StopSameLayer强制中断同层动画并从头播放
    anim.Play("HitMarkerBodyAnim", PlayMode.StopSameLayer);
}

PlayMode.StopSameLayer会停止当前动画所在层的所有动画,然后立即启动新的动画,这样每次命中都会从头播放Hitmarker动画。

方法2:手动重置动画时间再播放

如果需要更精细的控制,可以先停止动画、重置播放时间,再重新启动:

if (targetBody != null)
{   
    targetBody.TakeDamageBody(damageBody);
    hitMarkerBodySound.Play(1);
    
    // 停止目标动画
    anim.Stop("HitMarkerBodyAnim");
    // 将动画时间重置为0帧
    anim["HitMarkerBodyAnim"].time = 0;
    // 重新播放
    anim.Play("HitMarkerBodyAnim");
}

推荐方案:改用Animator组件(更现代的动画系统)

如果你项目允许,建议替换成Animator组件(Unity推荐的现代动画系统),它的Play方法支持直接指定从开头播放,无需额外处理:

  1. 将CanvasCrosshair上的Animation组件替换为Animator组件
  2. 创建Animator Controller,添加HitmarkerBodyAnim动画状态
  3. 修改脚本中的代码:
// 替换原来的Animation变量为Animator
public Animator anim;

void Start()
{
    anim = CanvasCrosshair.GetComponent<Animator>();
}

// 在Shoot方法中调用
anim.Play("HitMarkerBodyAnim", -1, 0f);

第三个参数0f表示normalizedTime,强制动画从0%进度开始播放,不管当前是否在播放状态。

补充说明:优化Coroutine方案

你之前尝试的Coroutine方法也可以调整,确保每次命中都能重新触发显示:

private Coroutine activeHitMarkerCoroutine;

if (targetBody != null)
{   
    targetBody.TakeDamageBody(damageBody);
    hitMarkerBodySound.Play(1);
    
    // 停止之前的协程(如果存在)
    if (activeHitMarkerCoroutine != null)
        StopCoroutine(activeHitMarkerCoroutine);
    
    hitMarkerBody.SetActive(true);
    activeHitMarkerCoroutine = StartCoroutine(HitMarkerBodyShow());
}

IEnumerator HitMarkerBodyShow()
{
    yield return new WaitForSeconds(showtime);
    hitMarkerBody.SetActive(false);
    activeHitMarkerCoroutine = null;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:47:48