如何将Timeline用于网络游戏的剧情系统中

Timeline是随Unity2017发布的新功能,由于具有直观的可视化时间轴编辑界面,并且配合Cinemachine插件可以很高效的编辑剧情镜头,所以是一个十分好的剧情工具

 

如何使用Timeline请参考 :例子Demo:

https://pan.baidu.com/share/init?surl=c17OMTM 密码 s9s1

教程资源:

http://edu.csdn.net/huiyiCourse/detail/453

https://zhuanlan.zhihu.com/p/29387185

 

 

 

而网络游戏中的角色都是动态生成的,所以如果要结合Timeline编辑剧情,就需要将动态生成的角色放入到“剧本”中。以下提供一个解决方案。

(更新于2018年11月22日)实际上Timeline所引用的物体直接拖入成为Timeline Object的子物体就可以了(如下图)。根本不用下面麻烦的操作。

外部触发只需要提供timelineSn用于索引timeline,timelineDataSn用于索引剧情中的数据

TimelineData类用于timeline中的数据保存,通过Scriptable 序列化数据。数据主要分为演员数据和相机数据。

演员数据

 

摄像机数据

 

 

 

摄像机数据分为场景数据(比如剧情演员列表,虚拟摄像机指向对象等),非场景数据(虚拟摄像机的参数控制),场景数据填写规则如下,非场景数据通过prefab来保存。

lookAtPart可以瞄准指定演员的指定部位 Actor/Part1/Part12,层级位置即是Hierachy中的层级位置,除了顶层用的是ActorData中的actorName以外其余名称都是一致的。

followActorOrPostion 如果点选了follow模式则是指定跟随演员名字,如果是非follow模式则可以自己指定虚拟相机位置。

另外加一个CreateAsset.cs 扩展Editor生成数据空壳。

作TimelineController类负责具体的timeline剧情细节,外部通过它来管理timeline剧情,而无需管具体细节。

 其最主要的职责之将 剧情数据与剧情相结合,而AssemblyTimeline方法主要执行这项工作。

调用的Unity给出的接口有

PlayableAsset 的outputs数据,这里获取剧情的binding数据,然后通过binding的sourceObj获取Track的类型,然后根据Track类型分别处理。

binding列表

 

对于AnimationTrack:通过SetGenericBinding来设置动作的执行演员(要求有Animator)

 

对于CinemachineTrack:通过GetClips获取镜头列表,然后通过Director的 SetReferenceValue将场景中的虚拟相机传入Timeline 中

对于自定义的PlayableBehaviour,也是通过类似的方法来传数据。但是另外有一点需要注意的是通过GetClips获取的是PlayableAsset对象,我认为他是一个对PlayableBehaviour对象的代理,如何对接两者的具体写法可以参照我自写的ConversationPlayable类。

ScenarioObjController类用于管理剧情中的演员。

ScenarioMod类模式类来管理剧情数据,以及执行主要逻辑。

剧情的演员列表存在ScenarioMod中的一个Dictionary中,Key是Name,Value是演员的ScenarioObjController

代码工程地址:

https://pan.baidu.com/s/1eSs3jAq

 

主场景在TimelineAction下的scene,按”K”键开始剧情。

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值