您现在的位置是:首页 >技术杂谈 >Unity 过场工具(Cutscene)设计(四) ——组件化设计网站首页技术杂谈

Unity 过场工具(Cutscene)设计(四) ——组件化设计

步云端 2024-06-17 11:27:56
简介Unity 过场工具(Cutscene)设计(四) ——组件化设计

Unity 过场工具(Cutscene)设计(四) ——组件化设计

写到这一篇文章前就开始在考虑如何才能说清楚自己的设计思路,因为后续涉及到编辑器和Runtime框架的实际设计和实现过程,两者之间是互相有设计因果关系的。为了阐述自己的核心设计思路,最终就有了这篇文章。

组件化设计

在开发过场工具之前,实际上我开发过很多其他的Unity内部的工具,比如整套的节点剧情流程编辑器(实际上是不仅仅用来跑剧情,新手引导,关卡流程都可以)。副本编辑器,表情编辑器等等。

实际上在设计思路上都是设计通过设计组件的方式,提供给项目组进行使用。让工具更具有灵活性,功能上工具有扩展性。

过场工具的组件设计

Runtime 层

为了和Timelie做配合,第二章中(Unity 过场工具(Cutscene)设计(二))所提到到的元素都将其设计为一个基于基本中间对照组件(BaseContrast)的特定实现的组件。后面统一称为中间件

对照组件有如下功能:

  1. 提供统一的基础信息。比如Id,绑定资源,资源绑定方式,Timeline相关的绑定信息等等。

  2. 统一的代码调用扩展接口(包括通用的生命周期函数接口,和各个通用的重载功能接口等等)

  3. 拥有绑定功能组件的能力(功能组件下面说明)

实际上:对照组件不存在任何实际的功能,其实际上就是过场元素的容,提供过场元素归类和扩展。解决第一章所说过场内容类型不同导致的各种操作绑定问题

有了中间件(Contrast)就需要驱动中间件的功能组件,来完成我们在过场中实际所要达到的各种表现。也就是实际和Timline功能轨道做对照的功能组件。(ContrastAttachCom

例如:

  • 角色移动,镜头移动

  • 特效挂载,镜头跟随

  • 各种显示隐藏

  • 其他功能等等

最终达到的效果是只需要开发功能组件,让中间件选择想要的功能组件进行绑定,对应的中间件就会有对应可操作的功能。

代码结构大体如下(做了调整的伪代码,看得懂就行)

    public class BaseContrast : MonoBehaviour, XXXInterFace
    {
        ...
        public bool isAutoImport = false;
        protected ILoader loader;
        ...
        
        /// <summary> 初始化绑定功能组件</summary>
        public void OnInitAttachComs()
        {
           var coms =  GetAttachComs(true);
            foreach (var com in coms)
            {
                com.OnInit();
            }
        }
    }

Timeline Playable 功能Track

Unity Timline本身提供了自定义扩展Track的功能 ,官方参考示例可以看一下。

在设计功能组件时 ,如果需要对应的视觉表现的 就需要配套的自定义Track。

当然基于官方Track的开发方法,这边也会封装一套更容易扩展的接口。

  public abstract class BaseTrack<T,K> : TrackAsset, ITrack where T: BaseMixerBehaviour<K>, new() where K: BaseStateBehaviour, new()
  public class BaseMixerBehaviour<T> : PlayableBehaviour where T: BaseStateBehaviour,new()
  public class BaseStateBehaviour : PlayableBehaviour, xxinterface
  public class BaseTrackClip<T> : PlayableAsset, ITimelineClipAsset, IClip where T: BaseStateBehaviour, new()

基于上面的封装,可以更好的自定义和属于功能组件的Track轨道。

Editor编辑器层

编辑器层主要是提供以下功能

  1. 方便的即时预览功能

  2. 对Runtime层的可视化 以及对应的操作

同Runtime层的组件化设计一样,编辑器下也对应进行组件设计。(其实就是对元素和功能组件的可视化封装)

  1. 对应元素页签组件编辑器设计

  2. 元素内容编辑器设计

  3. 元素对应中间件功能编辑器设计

  4. Timline clip inspector设计

  5. 和Timeline编辑器饿联动

有一套完善的编辑器开发组件,可以减少大批量编辑器重复代码,同时扩展新功能也更加方便。

最最重要的 编辑器的结构其实就能展示整体的过场框架设计

大体结构如下

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。