AnimationClip 动态添加 AnimationEvent
/* 添加事件 */
private void AddEvent()
{
var animClip = Resources.Load<AnimationClip>("Test.fbx");
if (animClip != null)
{
AnimationEvent evt = new AnimationEvent();
evt.time = 0f;
evt.functionName = "TriggerAnimationEvent";
evt.floatParameter = 1f;
animClip.AddEvent(evt);
}
return;
}
AnimationClip 动态修改 AnimationEvent 参数
/* 修改事件参数 */
private bool ResetEventFloatParameter(AnimationClip clip, string funcName, float parameter)
{
bool isReset = false;
List<AnimationEvent> events = new List<AnimationEvent>();
foreach (var currentEvent in clip.events)
{
var newEvent = new AnimationEvent();
Clone(currentEvent, newEvent);
if (currentEvent.functionName == name)
{
newEvent.floatParameter = parameter;
isReset = true;
}
events.Add(newEvent);
}
// 直接修改不生效,此处是清除重新添加
clip.events = null;
foreach (var evt in events)
{
clip.AddEvent(evt);
}
return isReset;
}
private static void Clone(AnimationEvent l, AnimationEvent r)
{
r.functionName = l.functionName;
r.floatParameter = l.floatParameter;
r.intParameter = l.intParameter;
r.objectReferenceParameter = l.objectReferenceParameter;
r.stringParameter = l.stringParameter;
r.time = l.time;
}
如有错误,欢迎指出。