美文网首页
Unity Timeline扩展 添加停止监听、一次性清除所有监

Unity Timeline扩展 添加停止监听、一次性清除所有监

作者: 不正经的搬砖工 | 来源:发表于2024-06-23 15:15 被阅读0次

使用TImeline时通常需要对Timeline的播放、暂停、停止监听。

1、我们可以扩展Timeline的PlayableDirector类,添加监听接口,如下代码中的AddListener_Stopped()接口,调用PlayableDirector的stopped、played或paused添加回调行为,这儿只实现了停止的监听。

2、由于PlayableDirector的stopped是event action,可以直接通过+=/-=添加或删除某个Action,但不能像Action那样直接通过=赋值为空清除所有Action。但有时可能中途销毁Timeline,销毁时我们就需要将event所有注册的Action清除,目前我们只能使用反射来实现。实现接口为RemoveAllListeners_Stopped()。首先获取PlayableDirector对象包含的所有事件,然后遍历所有事件,找到命名为"stopped”的事件,然后获取该事件对应的成员属性信息,将成员属性信息的值置空。

实现代码如下:

using System;

using System.Reflection;

using UnityEngine.Playables;

public static class TimelineExtend

{

    /// <summary>

    /// 添加停止监听

    /// </summary>

    /// <param name="pd"></param>

    /// <param name="callback"></param>

    public static void AddListener_Stopped(this PlayableDirector pd, Action<PlayableDirector> callback)

    {

        pd.stopped += callback;

    }

    public static void RemoveAllListeners_Stopped(this PlayableDirector pd)

    {

        BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static;

        EventInfo[] eventInfo = pd.GetType().GetEvents(bindingFlags);

        if (eventInfo == null) return;

        foreach(EventInfo info in eventInfo)

        {

            if(string.Compare(info.Name, "stopped")==0)

            {

                FieldInfo fieldInfo = info.DeclaringType.GetField(info.Name, bindingFlags);

                if(fieldInfo != null)

                {

                    fieldInfo.SetValue(pd, null);

                }

                break;

            }

        }

    }

}

相关文章

  • events

    events的实例 - emitter 绑定事件 向事件的监听器数组前面添加事件 绑定一次性事件 向一次性事件的监...

  • Flutter监听APP前后台切换

    需要监听的类混入WidgetsBindingObserver,initState里添加监听,dispose里移除监...

  • Unity编辑器扩展

    Unity编辑器扩展 Unity窗口扩展 菜单栏添加方法 基础结构 在Unity的菜单栏中添加一个可执行方法,并指...

  • Unity TimeLine之Control Track

    前言 Unity 2017 引入了TimeLine功能,引用以下官方描述 Use Unity’s Timeline...

  • Unity Timeline翻译

    原文Unity launched Timeline along with Unity 2017.1 and sin...

  • Timeline中让你事半功倍的工具链

    本文转自Unity Connect博主 大智 Timeline功能很强大,但更强大的是它的扩展功能以及周边的一些工...

  • [干货分享]Unity3D 深入解析Timeline编辑器

    前言 这是Timeline系列的第三篇,前两篇分别是Unity3D Timeline预览和Unity3D Time...

  • swift(监听与响应)

    添加一个view并在view上加一个单击手势 响应单击手势 添加kvo监听 创建一个kvo监听的类,并定义一个要监...

  • Unity3d学习资料

    Unity中的动画系统和Timeline(Unity2017) http://www.sikiedu.com/co...

  • KVO

    KVO键值观察 KVO三部曲: 添加监听 监听回调 移除监听(很重要,一定不能忘记) KVO可以对摸一个属性进行监...

网友评论

      本文标题:Unity Timeline扩展 添加停止监听、一次性清除所有监

      本文链接:https://www.haomeiwen.com/subject/glxrcjtx.html