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

Animator覆盖控制器导致Sprite Renderer代码修改失效问题

敌人Animator覆盖控制器导致精灵残留问题

场景设定

  • 项目中有一个名为Enemy的Animator Controller:
    • 死亡动画片段:播放4帧后禁用Sprite Renderer
    • EnemyDamaged动画片段:仅在几帧内修改敌人的位置与旋转
  • 绿色史莱姆使用Override Controller,替换了上述动画片段中的精灵资源;蓝色、红色史莱姆使用默认的Enemy控制器,仅控制Sprite Renderer的启停,不修改精灵本身。

初始化逻辑

Enemy.cs脚本的Initialize方法负责生成新怪物,代码如下:

public void Initialize(Monster monster)
{
    animator.ResetTrigger("Dead");
    animator.ResetTrigger("Damaged");
    health = monster.health;
    maxHealth = monster.health;
    attack = monster.attack;
    defense = monster.defense;
    this.monster = monster;
    enemyNameText.text = monster.name;
    spriteRenderer.sprite = monster.sprite;
    currentHealthTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, maxHealthTransform.rect.width * (float)health / maxHealth);
    animator.runtimeAnimatorController = monster.animatorController ? monster.animatorController : defaultAnimatorController;
    animator.SetTrigger("Spawned");
}

问题现象

绿色史莱姆(唯一使用覆盖控制器的敌人)死亡后,后续生成的所有敌人都会固定显示绿色基底精灵;但红蓝史莱姆死亡后,后续生成的敌人精灵能正常更新。

若修改代码强制使用默认控制器:

public void Initialize(Monster monster)
{
    animator.ResetTrigger("Dead");
    animator.ResetTrigger("Damaged");
    health = monster.health;
    maxHealth = monster.health;
    attack = monster.attack;
    defense = monster.defense;
    this.monster = monster;
    enemyNameText.text = monster.name;
    spriteRenderer.sprite = monster.sprite;
    currentHealthTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, maxHealthTransform.rect.width * (float)health / maxHealth);
    animator.runtimeAnimatorController = defaultAnimatorController;
    animator.SetTrigger("Spawned");
}

问题会消失,但无法再使用覆盖控制器替换动画资源。

补充信息

  • 可通过GitHub仓库(Clicker-Knight-PublicClone)复现该问题
  • 问题直观表现:绿色史莱姆死亡后,后续生成的红色、蓝色史莱姆错误显示绿色精灵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:17:17