TimelineAction 自定义timeline上下文菜单和快捷键

继承TimelineAction
官方案例

[MenuEntry("Custom Actions/Sample Timeline Action")]
    public class SampleTimelineAction : TimelineAction
    {
        public override ActionValidity Validate(ActionContext context)
        {
            return ActionValidity.Valid;
        }

        public override bool Execute(ActionContext context)
        {
            Debug.Log("Test Action");
            return true;
        }

        [TimelineShortcut("SampleTimelineAction", KeyCode.Q)]
        public static void HandleShortCut(ShortcutArguments args)
        {
            Invoker.InvokeWithSelected<SampleTimelineAction>();
        }
    }

更多

using System.Collections.Generic;
using UnityEditor.ShortcutManagement;
using UnityEditor.Timeline;
using UnityEditor.Timeline.Actions;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;

namespace DocCodeExamples
{
    class TimelineAttributesExamples_HideAPI
    {
        #region declare-sampleTrackBindingAttr

        [TrackBindingType(typeof(Light), TrackBindingFlags.AllowCreateComponent)]
        public class LightTrack : TrackAsset {}

        #endregion

        #region declare-menuEntryAttribute

        [MenuEntry("Simple Menu Action")]
        class SimpleMenuAction : TimelineAction
        {
            public override ActionValidity Validate(ActionContext actionContext)
            {
                return ActionValidity.Valid;
            }

            public override bool Execute(ActionContext actionContext)
            {
                return true;
            }
        }

        [MenuEntry("Menu Action with priority", 9999)]
        class MenuActionWithPriority : TimelineAction
        {
            public override ActionValidity Validate(ActionContext actionContext)
            {
                return ActionValidity.Valid;
            }

            public override bool Execute(ActionContext actionContext)
            {
                return true;
            }
        }

        [MenuEntry("My Menu/Menu Action inside submenu")]
        class MenuActionInsideSubMenu : TimelineAction
        {
            public override ActionValidity Validate(ActionContext actionContext)
            {
                return ActionValidity.Valid;
            }

            public override bool Execute(ActionContext actionContext)
            {
                return true;
            }
        }

        #endregion

        #region declare-timelineShortcutAttr

        public class ShortcutAction : TimelineAction
        {
            public override ActionValidity Validate(ActionContext _)
            {
                return ActionValidity.Valid;
            }

            public override bool Execute(ActionContext _)
            {
                Debug.Log("Action executed.");
                return true;
            }

            [TimelineShortcut("Test Action", KeyCode.K, ShortcutModifiers.Shift | ShortcutModifiers.Alt)]
            public static void HandleShortCut(ShortcutArguments args)
            {
                Invoker.InvokeWithSelected<ShortcutAction>();
            }
        }

        #endregion

        #region declare-applyDefaultUndoAttr

        [ApplyDefaultUndo]
        public class SetNameToTypeAction : TrackAction
        {
            public override ActionValidity Validate(IEnumerable<TrackAsset> items)
            {
                return ActionValidity.Valid;
            }

            public override bool Execute(IEnumerable<TrackAsset> items)
            {
                foreach (TrackAsset track in items)
                    track.name = track.GetType().Name;
                return true;
            }
        }

        #endregion

        #region declare-customStyleMarkerAttr

        [CustomStyle("MyStyle")]
        public class MyMarker : UnityEngine.Timeline.Marker {}

        #endregion

        #region declare-customTimelineEditorAttr

        [CustomTimelineEditor(typeof(MyCustomClip))]
        class MyCustomClipEditor : ClipEditor {}

        #endregion

        class MyCustomClip : PlayableAsset
        {
            public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
            {
                return Playable.Null;
            }
        }
    }
}


Class TimelineAction | Timeline | 1.6.4 (unity3d.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容