jpa在dao层继承还是实现_[我花2个月做了叙事短篇游戏]我是如何实现剧情演出的(下)...

220b4c39ee3be34d2d0c6d929a03e10b.png

前言


生活总是麻烦事情不断,还是准备先把这一节内容补全收尾后再专心做些其他事情。而其他事情呢,比如说拓展圈子(找适合的人),比如说新的游戏计划,这些后面单独拿写一份出来吧,如果有兴趣的朋友可以关注下。
回到正文,这篇内容是Timeline的补齐,因为2019后unity更新了一次自定义轨道部份的内容,之前写的代码已经不适用了。但是修改的部份其实不算复杂,我们只需要了解部份接口就可以开始进行代码添加自定义的Timline片段。太过深入部份底层部份,这篇文章不会牵扯太多,因为我一贯的文章内容都是面向初学者的,这个目标基本不会改变。

Timeline自定义功能

创建轨道
打开Timeline窗口,可以看到有个名为PlayableTrack的轨道,这个轨道是默认存放我们自定义脚本的。
PS:Unity是可以增加自定义轨道的,这里像进阶的朋友可以看

如何在Timeline中创建自定义轨道?_大智的Unity探路营-CSDN博客_timeline 自定义轨道​blog.csdn.net
f76e88c8fc109be96e7219fe96d73d57.png

2a5d5e30381b63e826d337b8a7445a56.png

创建自定义功能片段
我们右键资源目录,创建Playable Asset C# Script

6f510818a1a957ea63e7ff05121d64c7.png


本质上,这里无非是unity帮忙建立了个C#的脚本,添加了Serializable的属性,继承其Timeline的抽象类PlayableAsset
以下为创建好的脚本

46d0ed4bc79625a0a6f20a266effc94e.png

序列化重要的知识
Timeline文件是做为资源配置保存的,任何涉及到数据要保存成为具体文件(资源配置),都需要序列化(保存)与反序列化(读取)。因此我们创建的配置相关的脚本是必须添加Serializable属性的,这样才能保证你创建的属性能够正确的保存在硬盘中。

dda76cce8eee3a699c311cdf376751b9.png


在上面截图大家也看到了,除了Playable Asset之外还有个Playable Behaveiour脚本的创建。这里并不是一定要创建两个脚本的意思,而是Unity告诉你,它是通过分离配置和数据处理来实现功能的。
所以我们可以直接在一个脚本文件中创建两个类
下方是一个播放Dotween功能的timeline自定义功能片段

PlayTweenClip
继承PlayableAsset,用作在Timeline界面上能配置片段属性。PlayTweenClipBehaviour直接作为其变量保存,这样避免相同属性要书写两次
CreatePlayable是抽象类中必须实现的函数,目的是Timeline实例化创建成功后将配置的Behaviour类生效在这个轨道的片段上 PlayTweenClipBehaviour
继承PlayableBehaviour,这个类中的变量根据需求自己定义,务必注意的是,像Image、Text、Animator这类需要外部引用的变量,需要包裹ExposedReference,不然配置好的数据不会正确的保存在Timeline资源中
要获得该资源本身需要通过.Resolve(playable.GetGraph().GetResolver())方法获取
PS:这里你能看到PlayTweenClipBehaviour也是添加了Serializable属性的

e21cc69d13f1f8278a9c1c5473bda2c0.png

cebd5afdbb2bbad0efc18df29b2c775c.png
当创建好该脚本后,可以右键轨道看到新增的自定义片段。

f43be2400bf806fd738da75f77d1642d.png
PlayTweenClipBehaviour的属性已经展示了出来

拓展框架信息
这里既然讲到了数据分离,简单扩展下框架的内容:
我们经常能听到MVC、MVP、MVVM等名字的框架,其实框架本身,无非就是M(数据)V(显示),而通过什么方式来操作数据,修改显示,就是C、P、VM部份的内容。

使用Unity开发游戏,有流行的框架嘛?​www.zhihu.com
d58f597876215f757f856062c0dff32c.png

需要提醒几个注意的要点

  • PlayableAsset脚本里面直接创建PlayableBehaviour的变量这是一个非常方便的写法,很多Timeline插件都是通过这种方式来创建脚本的,虽然Unity希望分开两个脚本,但是这样做无疑会更加的方便书写。
  • ScriptPlayable<PlayTweenClipBehaviour>.Create(graph, Temp),这个是将我们的PlayableBehaviour正确生效到PlayableGraph上,也就是建立起来了Timeline轨道本身与功能脚本的关联。PlayableGraph将会把自己表现层配置的数据传递到PlayableBehaviour让你书写的逻辑生效。这也是实现Unity在同一个轨道上,配置多个不同片段数据的功能。

8c476a06447af5cb5d98511e24687425.png
  • PlayableBehaviour的重要可继承功能函数说明

ad3f8a57a1a61cbf058d5e7332767ced.png
OnBehaviourPlay:当Timeline进入这个片段的时候调用 OnBehaviourPause:当Timeline离开该片段时候调用,这里务必注意,并不是Timeline暂定的时候才会调用 OnGraphStart&OnGraphStop:Timeline的PlayableDirector启动与离开
  • 获得播放属性信息

0c1e2150973a5102dfc0687975ba1cdf.png
Playable获得播放属性信息,FrameData获得当前帧的时间内容信息

1d2c4a218b368abdc525408f9d32897b.png
直接看Playable类是一个结构体,是无法得到具体播放信息的

88db2db834e6cfc6e0a81d6f20d44661.png
但是可以通过直接 . 来获得其片段当前时间、持续时间等信息

6b133045907ad0456926e1a8c6b35c2f.png
Timelin扩展函数是来源脚本PlayableExtensions的


总结

  1. 自定义脚本的创建只需要PlayableAsset和PlayableBehaviour,分别处理记录数据将Timeline显示层的数据传入PlayableBehaviour中处理,而PlayableBehaviour能通过Playable和FrameData获取当前轨道信息,通过额外添加的参数属性来达到我们自定义功能的目的。
  2. 可以在PlayableAsset中直接定义PlayableAsset变量,达到节约代码量的目的。
    引用类型的数据变量,务必需要ExposedReference来传递获取,否则会丢失无法保存。
  3. 需要熟悉PlayableBehaviour的关键调用函数,在不修改自定义轨道功能情况下,这个是唯一的获取关键事件点信息的信息来源。
  4. Timeline的拓展数据函数来源于PlayableExtensions脚本,可以通过PlayableBehaviour类中的Playable数据获取到。

工程案例代码我在之前的章节中已经存放进去了,想更了解的朋友可以去下载工程

Unity版本2019.3.2f1

https://github.com/chs71371/NovelsEditor​github.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值