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

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

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

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

演员数据
public struct ActorData
{
    public string actorModelSn;//演员模型
    public string acotrName;//演员名字,剧情中演员的唯一标识
    public Vector3 actorPos;//由于演员出生位置、转角
    public Vector3 actorRotation;
}

摄像机数据

public struct VCamData
{
    public string vCamPrefabSn;//索引保存非场景数据的prefab
    public string lookAtPart;//lookAtPart可以瞄准指定演员的指定部位
    public string followActorOrPostion;//跟随演员名字或出生位置
}


  1. CreateAsset.cs 扩展Editor生成数据空壳。
  2. TimelineController类负责具体的timeline剧情细节,外部通过它来管理timeline剧情,而无需管具体细节。其最主要的职责之将 剧情数据与剧情相结合,而AssemblyTimeline方法主要执行这项工作。调用的Unity给出的接口有PlayableAsset 的outputs数据,这里获取剧情的binding数据,然后通过binding的sourceObj获取Track的类型,然后根据Track类型分别处理。

binding列表


  1. 对于AnimationTrack:通过SetGenericBinding来设置动作的执行演员(要求有Animator)
  2. 对于CinemachineTrack:通过GetClips获取镜头列表,然后通过Director的 SetReferenceValue将场景中的虚拟相机传入Timeline 中
  3. 对于自定义的PlayableBehaviour,也是通过类似的方法来传数据。但是另外有一点需要注意的是通过GetClips获取的是PlayableAsset对象,我认为他是一个对PlayableBehaviour对象的代理,如何对接两者的具体写法可以参照我自写的ConversationPlayable类。
  4. ScenarioObjController类用于管理剧情中的演员。
  5. ScenarioMod类模式类来管理剧情数据,以及执行主要逻辑。
  6. 剧情的演员列表存在ScenarioMod中的一个Dictionary中,Key是Name,Value是演员的ScenarioObjController

代码工程地址:

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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity Timeline是一款由Unity于2017年推出的电影序列工具,它可以帮助设计师更方便地编辑影片的动作、声音、事件、视频等内容。Timeline无需编写代码,通过简单的拖拽操作,设计师可以轻松完成剧情的编辑,使他们能够更专注于剧情的讲述和故事的表达,从而加快制作流程。 在Unity使用Timeline,需要将动态生成的角色放入到“剧本”,这样可以结合Timeline编辑剧情。可以通过CreateAsset.cs扩展Editor生成数据空壳,然后使用TimelineController类来管理具体的timeline剧情细节。TimelineController的主要职责是将剧情数据与剧情相结合,并通过Unity提供的接口来处理不同类型的Track。通过获取PlayableAsset的outputs数据,获取剧情的binding数据,然后根据binding的sourceObj获取Track的类型,再根据不同的Track类型进行相应的处理。 总结来说,Unity Timeline是一款可视化的电影序列工具,通过拖拽操作可以轻松编辑剧情,而不需要编写代码。在使用Timeline时,需要将动态生成的角色放入剧本,并通过CreateAsset.cs和TimelineController类来管理和处理剧情的细节。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Unity--如何将Timeline用于网络游戏剧情系统](https://blog.csdn.net/qq826364410/article/details/80501824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [【UnityTimeLine系列教程——编排剧情!](https://blog.csdn.net/m0_69824302/article/details/128014968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值