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

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

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

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”键开始剧情。

猜你喜欢

转载自blog.csdn.net/qq826364410/article/details/80501824
今日推荐