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
相关产品推荐
相关产品推荐

