Files
daluandou/动画Event函数配置说明.md
T
2026-09-01 18:17:34 +08:00

5.1 KiB

Unity 动画 Event 函数配置说明

本文档记录《召唤之战》当前动画片段需要配置的 Animation Event 函数名。

一、快速结论

当前项目实际使用的动画 Event 函数只有以下 3 个:

OnAttackEffect
OnSkillHit1
OnSkillHit2

在 Animation Event 的 Function 下拉框中填写函数名时,只填写名称,不要填写括号。


二、普通攻击命中 Event

函数名

OnAttackEffect

函数定义

public void OnAttackEffect()

所属脚本

Assets/Script/UnitBase.cs

用途

在普通攻击真正命中的那一帧调用一次,UnitBase 会根据单位的 AttackType 执行对应逻辑:

  • 近战攻击:直接给目标造成伤害
  • 远程攻击:生成并发射飞行物
  • 攻击命中后:增加技能能量

当前已配置该 Event 的攻击动画

动画片段 Event 函数名 当前 Event 时间(约)
Assets/Model/第一章/人类士兵/人类士兵-attack.fbx OnAttackEffect 0.365 秒
Assets/Model/第一章/人类士兵新/人类士兵-攻击.fbx OnAttackEffect 0.343 秒
Assets/Model/第一章/弓箭手/弓箭手攻击.fbx OnAttackEffect 0.987 秒
Assets/Model/第一章/精锐守卫士兵/Great Sword Slash.fbx OnAttackEffect 0.464 秒
Assets/Model/第二章/弓箭猎人/弓箭猎人攻击.fbx OnAttackEffect 0.427 秒
Assets/Model/第二章/狼人/狼人攻击.fbx OnAttackEffect 0.548 秒
Assets/Model/第二章/蓝色怪物/蓝色怪物动作-挥剑.fbx OnAttackEffect 0.367 秒

狼人攻击必须配置

选择:

Assets/Model/第二章/狼人/狼人攻击.fbx

在攻击命中帧添加:

OnAttackEffect

参数:无。

如果狼人攻击动画没有配置这个 Event,狼人会播放攻击动作,但不会真正结算伤害。


三、人类士兵技能攻击 Event

人类士兵技能动画有两段命中,需要配置两个 Event。

第一段命中

OnSkillHit1

函数定义:

public void OnSkillHit1()

所属脚本:

Assets/Script/HumanSoldierSkill.cs

用途:

  • 执行技能第一段伤害
  • 使用 1.0 倍攻击力

第二段命中

OnSkillHit2

函数定义:

public void OnSkillHit2()

所属脚本:

Assets/Script/HumanSoldierSkill.cs

用途:

  • 执行技能第二段伤害
  • 使用 bonusAttackMultiplier 配置的额外倍率
  • 防止第二段重复执行

当前技能动画配置

动画片段:

Assets/Model/第一章/人类士兵新/技能.fbx

当前配置顺序:

顺序 Event 函数名 当前 Event 时间(约)
1 OnSkillHit1 0.359 秒
2 OnSkillHit2 0.573 秒

注意:如果替换了技能动画,必须根据新动作的实际挥击命中帧重新调整两个 Event 的时间。


四、不要直接配置的函数

以下函数虽然是公开函数或参与技能逻辑,但不应直接作为当前 Animation Event 使用:

函数名 原因
ApplySkillHit 需要 float 和 bool 两个参数,不能按当前技能 Event 方式直接配置
RegisterAttackHit 只负责增加攻击能量,不负责判断具体命中目标
FireSkillProjectile 需要传入目标对象,由技能脚本控制调用
PlaySkillAnimation 负责启动技能状态,不是动画命中回调
OnRoarFinished BlueMonsterSkill 中为私有函数,不能作为公开 Animation Event 使用
OnSkillFinished HumanSoldierSkill 中为私有函数,技能结束由代码回调处理

五、配置步骤

  1. 在 Project 窗口选择对应的 .fbx 动画文件。
  2. 在 Inspector 的 Animation 页签中选择目标动画 Clip。
  3. 在时间轴上移动到实际命中帧。
  4. 点击 Add Event。
  5. 在 Event 的 Function 中选择或填写准确的函数名:
    • 普通攻击:OnAttackEffect
    • 人类士兵技能第一段:OnSkillHit1
    • 人类士兵技能第二段:OnSkillHit2
  6. 确认 Event 不需要填写参数。
  7. 点击 Apply 保存 FBX 动画导入设置。

六、Event 不生效时检查

Animation Event 会发送给播放该动画的 Animator 所在 GameObject,因此需要确认:

  • Animator 和接收函数所在脚本在同一个角色根节点上
  • 普通攻击角色根节点上有 UnitBase
  • 人类士兵技能角色根节点上同时有 UnitBase 和 HumanSoldierSkill
  • Function 名称大小写完全一致
  • 普通攻击 Event 只添加一次,避免一次攻击重复结算伤害
  • 不要把普通攻击 Event 添加到待机或移动动画
  • 技能两个 Event 的先后顺序不能颠倒
  • 替换动画后重新检查 Event 是否仍然存在

七、函数归属速查表

Event 函数 所属组件 适用动画
OnAttackEffect UnitBase 所有普通攻击动画,包括狼人攻击
OnSkillHit1 HumanSoldierSkill 人类士兵技能第一段
OnSkillHit2 HumanSoldierSkill 人类士兵技能第二段