Unity 如何批量给动画最后一帧加相同的事件
时间: 2025-07-05 20:07:28 浏览: 9
### Unity 中批量为动画最后一帧添加相同事件
在Unity中处理多个动画的最后一帧并为其统一绑定相同的事件可以通过脚本实现自动化操作。这不仅提高了工作效率,还减少了手动配置可能出现的人为错误。
对于每一个需要设置的关键帧,在`AnimationClip`中的最后一个时间点上创建关键帧,并通过编程方式指定该时刻触发特定函数调用[^2]。具体做法如下:
#### 使用C#脚本来完成此任务
编写一段简单的编辑器扩展代码来遍历项目内的所有动画剪辑文件(`.anim`),找到它们各自的时间轴末端位置处插入新的关键帧,并关联到预设的目标方法上去执行相应逻辑动作。
```csharp
using UnityEngine;
using UnityEditor;
public class AnimationEventAdder : EditorWindow {
private string functionName = "OnLastFrame";
[MenuItem("Tools/Add Event To Last Frame")]
static void Init() {
GetWindow<AnimationEventAdder>("Add Event");
}
void OnGUI(){
GUILayout.Label("Function Name",EditorStyles.boldLabel);
functionName = EditorGUILayout.TextField(functionName);
if(GUILayout.Button("Apply to Selected Animations")){
foreach (Object obj in Selection.objects){
var clip = obj as AnimationClip;
if(clip != null){
AddEventToLastFrame(clip,functionName);
}
}
}
}
/// <summary>
/// Adds an event at the last frame of given animation.
/// </summary>
public static void AddEventToLastFrame(AnimationClip clip,string methodName){
float endTime = clip.length; // 获取动画总长度
// 创建一个新的事件对象
AnimationEvent newEvent = new AnimationEvent();
newEvent.time = endTime * Mathf.NextPowerOfTwo((int)(1 / Time.captureFramerate)); // 设置时间为结束时间
newEvent.functionName = methodName; // 设定要调用的方法名称
// 将新创建的事件加入到动画片段里去
Undo.RecordObject(clip,"Added Event");
AnimationUtility.SetAnimationEvents(clip,new[]{newEvent});
}
}
```
这段脚本提供了一个自定义窗口让用户输入想要绑定的方法名,并允许一键应用至所选中的所有`.anim`资源文件上的最后时刻点位。当点击按钮后会自动检查当前场景内被选取的对象列表,针对其中符合条件(即属于`AnimationClip`类型)的数据项逐一进行修改操作。
阅读全文
相关推荐


















