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

Unity中如何停止Animator上的指定动画而不影响其他动画播放

解决方案

Unity的Animator组件没有直接提供Stop("动画名")的方法,但可以通过以下几种方案实现仅停止指定动画、不影响其他动画播放的需求:

方案1:动画层隔离(最推荐)

Animator的不同层之间的播放逻辑完全独立,你可以把每个专属KeyAnimation放到独立的层中,通过控制层权重实现启停:

  • 操作步骤:打开Animator编辑窗口,为Monitor1-KeyAnimation、Monitor2-KeyAnimation、Monitor3-KeyAnimation分别创建独立层,每个层仅放置对应专属的动画状态,层权重默认设为1,如不同动画作用于不同对象可搭配AvatarMask使用。
  • 停止指定动画代码(以Monitor0对应Key动画为例,假设其所在层索引为1):
// 将对应层权重设为0,该层动画就会停止生效,不影响其他层
KeyAnimation.SetLayerWeight(1, 0f);
// 需要恢复播放时把权重改回1即可

方案2:播放空状态替代

你可以给每个KeyAnimation所在的层添加一个无任何动作的空静止状态,需要停止对应动画时,直接让对应层播放空状态即可:

// 假设Monitor0的Key动画在层1,空状态名为EmptyState
KeyAnimation.Play("EmptyState", 1, 0f);

方案3:优化原有切换逻辑的示例

你原有的硬编码判断逻辑可以优化为循环版本,自动处理切换时旧动画的停止:

public void Balances()
 {
     for(int i = 0; i < Monitors.Length; i++)
     {
         int keyLayerIndex = i + 1; // 0层默认放基础动画,Key动画从1层开始分配
         if (Monitors[i].activeSelf)
         {
             MonitorAnimations[i].Play($"Monitor{i+1}-Animation", -1, 0f);
             KeyAnimation.Play($"Monitor{i+1}-KeyAnimation", keyLayerIndex, 0f);
             KeyAnimation.SetLayerWeight(keyLayerIndex, 1f);
         }
         else
         {
             // 非激活的显示器对应Key动画直接关闭层权重
             KeyAnimation.SetLayerWeight(keyLayerIndex, 0f);
         }
     }
 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:45:04