Unity AnimationClip 动态创建和修改AnimationEvent

AnimationClip 动态添加 AnimationEvent

/* 添加事件 */
private void AddEvent()
{
    var animClip = Resources.Load("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 events = new List();
    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;
}

如有错误,欢迎指出。

blog: http://blog.csdn.net/david_dai_1108

你可能感兴趣的:(Unity)