Skip to content

Latest commit

 

History

History
234 lines (183 loc) · 6.79 KB

File metadata and controls

234 lines (183 loc) · 6.79 KB

NPC工具动画Animation Clip配置完整指南

问题解决:EventAnimation参数错误

错误描述

Controller 'NPC_Girl_02': Transition '' in state 'AnyState' uses parameter 'EventAnimation' which does not exist in controller.

解决方案

我们在NPC_Girl_02.controller中添加了缺失的EventAnimation参数:

- m_Name: EventAnimation
  m_Type: 4
  m_DefaultFloat: 0
  m_DefaultInt: 0
  m_DefaultBool: 0
  m_Controller: {fileID: 9100000}

Unity编辑器完整配置步骤

步骤1:验证Animator Controller设置

  1. 检查NPC_Girl_02动画控制器

    • 在Project窗口导航到 Assets/Animators/NPC/NPC_Girl_02.controller
    • 双击打开Animator窗口
    • 在Parameters标签页中确认以下参数存在:
      • DirX (Float)
      • DirY (Float)
      • isMoving (Bool)
      • useTool (Trigger)
      • EventAnimation (Bool) ✅ 已添加
  2. 验证状态机结构

    • 确认存在以下状态:
      • Idle(默认状态)
      • Walk
      • Use Tool
    • 确认AnyState到Use Tool的过渡条件为EventAnimation = true

步骤2:配置NPCFarmingTask组件

  1. 选择NPC对象

    • 在Hierarchy中选择带有NPCFarmingTask组件的NPC
    • 例如:NPC_Girl_02
  2. 设置锄头工具动画片段

    在Inspector的NPCFarmingTask组件中:

    [工具动画系统 - Animation Clip方案]
    
    Hoe Tool Up Clip    ← 拖拽 Assets/M Studio/Animations/Tool/Hoe/HoeToolUp.anim
    Hoe Tool Down Clip  ← 拖拽 Assets/M Studio/Animations/Tool/Hoe/HoeToolDown.anim
    Hoe Tool Left Clip  ← 拖拽 Assets/M Studio/Animations/Tool/Hoe/HoeToolLeft.anim
    Hoe Tool Right Clip ← 拖拽 Assets/M Studio/Animations/Tool/Hoe/HoeToolRight.anim
    
  3. 设置浇水工具动画片段

    Water Tool Up Clip    ← 拖拽 Assets/M Studio/Animations/Tool/Water/WaterToolUp.anim
    Water Tool Down Clip  ← 拖拽 Assets/M Studio/Animations/Tool/Water/WaterToolDown.anim
    Water Tool Left Clip  ← 拖拽 Assets/M Studio/Animations/Tool/Water/WaterToolLeft.anim
    Water Tool Right Clip ← 拖拽 Assets/M Studio/Animations/Tool/Water/WaterToolRight.anim
    
  4. 配置动画控制参数

    [动画设置]
    
    Tool Animation Speed Multiplier: 1.0    (推荐范围: 0.8-1.5)
    Auto Return To Idle: ✓ true             (建议保持勾选)
    

步骤3:验证Animation Clip资源

确认以下动画文件存在且可正常使用:

锄头工具动画:

  • Assets/M Studio/Animations/Tool/Hoe/HoeToolUp.anim
  • Assets/M Studio/Animations/Tool/Hoe/HoeToolDown.anim
  • Assets/M Studio/Animations/Tool/Hoe/HoeToolLeft.anim
  • Assets/M Studio/Animations/Tool/Hoe/HoeToolRight.anim

浇水工具动画:

  • Assets/M Studio/Animations/Tool/Water/WaterToolUp.anim
  • Assets/M Studio/Animations/Tool/Water/WaterToolDown.anim
  • Assets/M Studio/Animations/Tool/Water/WaterToolLeft.anim
  • Assets/M Studio/Animations/Tool/Water/WaterToolRight.anim

步骤4:启动NPCFarmingManager

  1. 查找NPCFarmingManager

    • 在Hierarchy中找到NPCFarmingManager对象
    • 或在场景中的管理器对象上
  2. 配置种子偏好

    // 示例配置
    preferredSeedID = 1002; // 马铃薯
    searchRadius = 10f;
    workingTime = 2f;
  3. 启动耕种任务

    • 确保enableDailyFarming = true
    • 调用StartFarmingTask()方法

动画系统工作流程

1. 方向检测

// NPC根据目标位置计算朝向
Vector2 direction = GetDirectionToTarget();

// 确定主要方向(上/下/左/右)
FacingDirection facing = GetCurrentFacingDirection();

2. 动画选择

// 根据朝向和工具类型选择动画
AnimationClip clipToPlay = GetHoeToolClipByDirection(facing);
// 或
AnimationClip clipToPlay = GetWaterToolClipByDirection(facing);

3. 动画播放

// 设置播放速度并播放动画
animator.speed = toolAnimationSpeedMultiplier;
animator.Play(clipToPlay.name);

4. 状态恢复

// 动画结束后自动恢复
animator.speed = 1f;
if (autoReturnToIdle) {
    animator.SetBool("isMoving", false);
}

调试和测试

调试日志

系统会输出详细的调试信息:

NPC_Girl_02 开始播放锄头动画 - 方向: Down, 动画: HoeToolDown
NPC_Girl_02 播放动画片段: HoeToolDown, 速度倍率: 1
NPC_Girl_02 工具动画 HoeToolDown 播放完成

测试清单

  • NPC能正确检测四个方向(上下左右)
  • 每个方向都能播放对应的锄头动画
  • 每个方向都能播放对应的浇水动画
  • 动画播放流畅无闪烁
  • 动画结束后NPC正确返回Idle状态
  • 动画播放速度符合预期
  • 没有Unity控制台错误

常见问题排查

问题1:动画片段未播放

  • 检查Animation Clip是否正确拖拽到NPCFarmingTask组件
  • 确认动画片段名称与代码中的调用一致
  • 验证Animator Controller包含对应的动画状态

问题2:方向检测错误

  • 在代码中添加Debug.Log输出NPC位置和目标位置
  • 检查GetDirectionToTarget()方法的计算逻辑
  • 确认目标地块坐标正确

问题3:EventAnimation参数错误

  • 已修复:在NPC_Girl_02.controller中添加了EventAnimation参数
  • 如果其他NPC出现同样问题,需要同样添加这个参数

性能优化建议

  1. Animation Clip优化

    • 使用适当的动画压缩设置
    • 移除不必要的关键帧
    • 合理设置动画采样率
  2. 状态检测优化

    • 避免每帧都检测动画状态
    • 缓存方向计算结果
    • 使用事件驱动的状态更新
  3. 内存管理

    • 及时重置动画跟踪变量
    • 避免持有不必要的Animation Clip引用

扩展指南

添加新的工具动画

如需添加镰刀工具:

  1. 准备动画片段

    • 创建四个方向的镰刀动画
    • 命名规范:SickleToolUp.anim, SickleToolDown.anim
  2. 修改NPCFarmingTask

    [Header("镰刀工具动画")]
    public AnimationClip sickleToolUpClip;
    public AnimationClip sickleToolDownClip;
    public AnimationClip sickleToolLeftClip;
    public AnimationClip sickleToolRightClip;
  3. 添加选择方法

    private AnimationClip GetSickleToolClipByDirection(FacingDirection direction)
    {
        switch (direction)
        {
            case FacingDirection.Up: return sickleToolUpClip;
            case FacingDirection.Down: return sickleToolDownClip;
            case FacingDirection.Left: return sickleToolLeftClip;
            case FacingDirection.Right: return sickleToolRightClip;
            default: return sickleToolDownClip;
        }
    }

现在Animation Clip系统已经完全配置好了,可以提供专业的方向感知工具动画效果!