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

news2025/1/15 13:02:40

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编辑器饿联动

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

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

大体结构如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0.5开始开发一个导购网站

提醒&#xff1a;文中没有具体如何修改的代码&#xff0c;只是提供了修改的思路。 为什么是从0.5开始呢&#xff1f; 因为这里借助了一个大佬的开源项目Springboot项目仿天猫商城: Springboot项目仿天猫商城 前台jsp页面 大佬的代码简洁&#xff0c;没有什么多余的功能&…

系统调用与API

系统调用介绍 什么是系统调用 为了让应用程序有能力访问系统资源&#xff0c;也为了让程序借助操作系统做一些由操作系统支持的行为&#xff0c;每个操作系统都会提供一套接口&#xff0c;以供应用程序使用。系统调用涵盖的功能很广&#xff0c;有程序运行所必需的支持&#xf…

leetCode刷题记录2

文章目录 hot100题560. 和为 K 的子数组581. 最短无序连续子数组 ▲617. 合并二叉树 hot100题 560. 和为 K 的子数组 560. 和为 K 的子数组 先暴力&#xff0c;过了再说 public int subarraySum(int[] nums, int k) {int ans 0;for (int i 0; i < nums.length; i) {in…

保姆级教程Windows11下安装RocketMQ

一、RocketMQ介绍 RocketMQ 是阿里巴巴开源的分布式消息中间件。支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念&#xff0c;如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。 二、Rock…

vector类详解【c++】

&#x1f600;博主主页 &#x1f600;博主码云 目录 &#x1f3c5;vector简介&#x1f3c5;vector使用&#x1f3c6;vector的定义&#x1f3c6;vector iterator 的使用&#x1f3c6;vector 空间函数&#x1f3c6;vector的扩容问题&#x1f3c6;vector 增删查改&#x1f3c6;vec…

Python tkintertools 模块介绍(新版)

&#x1f680;tkintertools&#x1f680; The tkintertools module is an auxiliary module of the tkinter module tkintertools 模块是 tkinter 模块的辅助模块 Installation/模块安装 Stable version/稳定版本 Version/版本 : 2.6.1Release Date/发布日期 : 2023/05/21 p…

Edge 浏览器:隐藏功能揭秘与高效插件推荐

文章目录 一、前言二、Edge 的各种奇淫巧计2.1 开启 Edge 分屏功能2.2 启动 Edge 浏览器后直接恢复上次关闭前的页面2.3 解决 Edge 浏览器无法同步账号内容2.4 开启垂直标签页&#xff08;推荐&#xff09;2.5 设置标签分组&#xff08;推荐&#xff09;2.6 设置标签睡眠时间&a…

网络管理 - 简单网络管理协议 SNMP

文章目录 1 概述1.1 结构1.2 操作 2 SNMP2.1 报文格式2.2 五大报文类型2.3 三大组件 3 扩展3.1 网工软考真题 1 概述 #mermaid-svg-xmaaQjpp1bT1axfw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xmaaQjpp1bT1axf…

实验篇(7.2) 01. 实验环境介绍 远程访问 ❀ Fortinet网络安全专家 NSE4

【简介】学习NSE4&#xff0c;如果只看文章而不动手做实验&#xff0c;就象耍流氓。为了有效的巩固学习到的内容&#xff0c;建议经常动手做实验。实验不怕出错&#xff0c;身经百战后&#xff0c;再在生产环境部署和配置FortiGate防火墙&#xff0c;就会做到胸有成竹。 虚拟实…

【网络协议详解】——RIP协议(学习笔记)

目录 &#x1f552; 1. IP路由协议概述&#x1f558; 1.1 路由表&#x1f558; 1.2 路由的度量尺度/度量值&#x1f558; 1.3 路由管理距离 &#x1f552; 2. RIP协议&#x1f558; 2.1 概述&#x1f558; 2.2 工作原理 &#x1f552; 3. 报文格式&#x1f558; 3.1 RIP 协议报…

【自动化测试】第一次项目实施

测试项目简介&#xff1a;基于python语言 跨平台的测试自动化工具&#xff0c;适用于后台、原生或混合型客户端应用的测试。它支持 Android、iOS、Web、后台、云服务和 Windows 端的 UI 自动化测试。 上手快&#xff0c;操作简单&#xff0c;只要有一点python基础&#xff0c…

5. 多线程并发锁

本文介绍了多线程并发下为了避免临界资源被抢占而出现的错误&#xff0c;引入了锁和原子操作 来解决。 一、问题分析 创建10个线程&#xff0c;每个线程实现往总进程加1万个数。则总进程会达到10万 #include<stdio.h> #include <unistd.h> #include<pthread.h…

路径规划算法:基于头脑风暴算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于头脑风暴的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于头脑风暴的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法头脑…

强化学习-初步认识

前言 强化学习这个概念是2017年Alpha Go战胜了当时世界排名第一的柯洁而被大众知道&#xff0c;后面随着强化学习在各大游戏比如王者荣耀中被应用&#xff0c;而被越来越多人熟知。王者荣耀AI团队&#xff0c;甚至在顶级期刊AAAI上发表过强化学习在王者荣耀中应用的论文。 什么…

BEVDet4D 论文学习

1. 解决了什么问题&#xff1f; 单帧数据包含的信息很有限&#xff0c;制约了目前基于视觉的多相机 3D 目标检测方法的性能&#xff0c;尤其是关于速度预测任务&#xff0c;要远落后于基于 LiDAR 和 radar 的方法。 2. 提出了什么方法&#xff1f; BEVDet4D 将 BEVDet 方法从…

C++ Vecter

C Vecter &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解了C中vector的介绍以及相关的一些接口的使用 …

Prometheus+Grafana监控系统

一、简介 1、Prometheus简介 官网&#xff1a;https://prometheus.io 项目代码&#xff1a;https://github.com/prometheus Prometheus&#xff08;普罗米修斯&#xff09;是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目&#xff0c;拥有非常活跃的开发人员…

第二章 Electron自定义界面(最大化、最小化、关闭、图标等等)

一、介绍 &#x1f606; &#x1f601; &#x1f609; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需…

linux--systemd、systemctl

linux--systemd、systemctl 1 介绍1.1 发展sysvinitupstart主角 systemd 登场 1.2 简介 2 优点兼容性启动速度systemd 提供按需启动能力采用 linux 的 cgroups 跟踪和管理进程的生命周期启动挂载点和自动挂载的管理实现事务性依赖关系管理日志服务systemd journal 的优点如下&a…

GAMS建模技术案例01 求解简单的线性规划模型

目录 1.问题描述 2 GAMS代码要点 2.1 代码编写要点 2.2 案例源码 2.3 计算结果及报告解 1.问题描述 首先给出一个基本线性规划问题的计算案例 subject to: 2 GAMS代码要点 2.1 代码编写要点 使用 * 表示注释文本定义变量 Positive Variable 表示定义非负变量Negative V…