当前位置: 首页 > news >正文

GAMES104:14 引擎工具链高级概念与应用-学习笔记

文章目录

  • 一,世界编辑器
  • 二,编辑器插件架构
  • 三,设计叙事工具
  • 四,Reflection和Gameplay
  • 五,协同编辑
  • QA


一,世界编辑器

其实是一个平台(hub),集合了所有能够制作地形世界的逻辑
在这里插入图片描述

  • editor viewport:可以说是游戏引擎的特殊视角,会有部分editor only的代码(不小心开放就会变成外挂入口)
  • Editable Object:人、物、房、云等都是可编辑对象
  • Object管理:场景对象结构(一般是树)、layer、搜索等功能
  • 属性面板
  • Content Browser:资源管理浏览器
  • 鼠标选取:用到Ray Casting,用包围盒或者用ObjectID Buffer区分物体(粒子或透明物体需要特殊处理)
  • transform、快捷键、高亮等交互
  • Height Brush:地形刷,需要设计smoothing或让艺术家自定义笔刷
  • 环境规则:比如路上不能有树,把结果保存为图,再进行程序化生成或刷子效果(甚至可以控制风格)
    在这里插入图片描述

二,编辑器插件架构

插件需要同时考虑引擎系统和对象2个维度,如图,支持矩阵性数据访问
在这里插入图片描述

  • 插件的4种组合方式:
    在这里插入图片描述
    在这里插入图片描述
  • 版本控制:引擎接口修改后可能会导致插件功能失效,这就需要引擎端设计接口时就考虑到这些问题,老师认为没有10年引擎经验可以不用考虑这些问题,同时老师不认为程序员写了5-10年代码就应该做管理,没有10-20年沉淀很难理解其中复杂度和丰富度,架构师也是程序员的终极归宿。

三,设计叙事工具

游戏做的越来越像电影,Storytelling就变得很重要,下图的时间线在ue里叫Sequencer,相当于电影导演的统筹安排,游戏中一些过场动画就是这样做的。这个过程中涉及到很多工具的实现
在这里插入图片描述

四,Reflection和Gameplay

  • 游戏玩法不断更新就需要不断提供新的工具、接口,现代引擎中可视化编程可以部分处理这种可拓展性,比如ue的蓝图;

  • 但是在增加逻辑后,接口、工具都需要有相应的更新,工作量是非常大的,那就需要用到反射Reflection(高级语言基本都支持,如java和c#)。「反射允许程序在运行时检查、修改和操作其自身的结构和行为」即引擎实现功能后,通过反射告诉工具有哪些开放类和接口可以访问,这时在蓝图中创建对象时,其接口参数全部可以展现

  • c++中如何实现反射?
    c++在编译时会翻译成抽象语法树(Abstract Syntax Tree,AST),比如类就会被翻译成一个树状结构表,在这个表里就比较容易提取接口和参数。课程小引擎用的是Clang,其中还涉及部分代码生成的内容

五,协同编辑

协同编辑是引擎发展方向,但大量数据、不同版本如何协作?

  • 冲突:用类似git的方式管理merge冲突;
  • 避免冲突:分层分配、分块分配、One File Per Actor
  • 在线同步操作:类似在线文档,需要同步,并解决Undo、Redo、Merge,比如用资源锁,或下述方法
    ,

QA

  • 反射会不会影响运行效率:Runtime基本不会,但在编辑工具里频繁调用会有消耗
  • 现代游戏开发中,DCC工具和引擎的分工是什么:DCC很多有渲染系统,引擎也想把DCC功能加入引擎里,两边都在大量融合

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024软件测试必问的常见面试题1000问!
  • LINQ 和 LINQ扩展方法 (1)
  • web杂项
  • 智慧平台赋能政务管理,声通科技助力政务管理智能化
  • 逆向基础一阶段检测-1
  • 等待唤醒机制和阻塞队列
  • Java List转Map
  • 【C++ Primer Plus习题】15.2
  • 如何使用树莓派构建 LoRa 网关?
  • 小说阅读网站登录注册搜索小说查看评论前后台管理计算机毕业设计/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
  • 通过ASCII码打印HelloWorld(花式打印HelloWorld)
  • post请求中有[]报400异常
  • 对游戏语音软件Oopz遭遇DDoS攻击后的一些建议
  • Element UI:初步探索 Vue.js 的高效 UI 框架
  • JavaScript变量
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【React系列】如何构建React应用程序
  • FineReport中如何实现自动滚屏效果
  • js学习笔记
  • 爱情 北京女病人
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 读懂package.json -- 依赖管理
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 番外篇1:在Windows环境下安装JDK
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 前端设计模式
  • 小试R空间处理新库sf
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • Mac 上flink的安装与启动
  • 阿里云API、SDK和CLI应用实践方案
  • ​Python 3 新特性:类型注解
  • ​ubuntu下安装kvm虚拟机
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (Charles)如何抓取手机http的报文
  • (Matlab)使用竞争神经网络实现数据聚类
  • (PADS学习)第二章:原理图绘制 第一部分
  • (二)斐波那契Fabonacci函数
  • (二十六)Java 数据结构
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (三)终结任务
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .aanva
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 版本不支持的问题
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET使用存储过程实现对数据库的增删改查
  • /etc/sudoer文件配置简析