Games104——引擎工具链高级概念与应用

news/2025/2/3 2:09:06 标签: 游戏引擎

在这里插入图片描述

世界编辑器

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

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

编辑器插件架构

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

在这里插入图片描述

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

设计叙事工具

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

Reflection和Gameplay

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

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

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

协同编辑

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

冲突:用类似git的方式管理merge冲突;
在这里插入图片描述

避免冲突:分层分配、分块分配(Divide The World)、One File Per Actor

在线同步操作:类似在线文档,需要同步,并解决Undo、Redo、Merge,比如用资源锁,或下述方法
在这里插入图片描述
在这里插入图片描述

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

原文链接


http://www.niftyadmin.cn/n/5840426.html

相关文章

如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景

Spring AOP在默认情况下使用的动态代理方式,可以比作是餐厅里的“智能服务员助手”。 Spring AOP默认提供了两种动态代理方式:JDK动态代理和CGLIB代理。其选择取决于被代理的对象是否实现了接口,以及配置的代理模式。默认情况下,…

2.攻防世界PHP2及知识点

进入题目页面如下 意思是你能访问这个网站吗? ctrlu、F12查看源码,什么都没有发现 用kali中的dirsearch扫描根目录 命令如下,根据题目提示以及需要查看源码,扫描以php、phps、html为后缀的文件 dirsearch -u http://61.147.17…

C#属性和字段(访问修饰符)

不同点逻辑性/灵活性存储性访问性使用范围安全性属性(Property)源于字段,对字段的扩展,逻辑字段并不占用实际的内存可以被其他类访问对接收的数据范围做限定,外部使用增加了数据的安全性字段(Field)不经过逻辑处理占用内存的空间及位置大部分字段不能直接被访问内存使用不安全 …

C++ strcpy和strcat讲解

目录 一. strcpy 代码演示: 二.strcat 代码演示: 一. strcpy 使⽤字符数组可以存放字符串,但是字符数组能否直接赋值呢? ⽐如: char arr1[] "abcdef"; char arr2[20] {0}; arr2 arr1;//这样这节赋值可…

89,[5]攻防世界 web Web_php_include

进入靶场 <?php // 显示当前 PHP 文件的源代码&#xff0c;方便调试或展示代码内容 show_source(__FILE__);// 从 URL 的查询字符串中获取名为 hello 的参数值&#xff0c;并将其输出到页面上 // 例如&#xff0c;当访问的 URL 为 "example.php?helloworld" 时&…

MATLAB中savefig函数用法

目录 语法 说明 示例 将当前图窗保存到 FIG 文件 将多个图窗保存到 FIG 文件 使用 compact 选项保存图窗 savefig函数的功能是将图窗和内容保存到 FIG 文件。 语法 savefig(filename) savefig(H,filename) savefig(H,filename,compact) 说明 savefig(filename) 将当前…

Unity3D仿星露谷物语开发26之创建场景控制管理器

1、目标 创建场景控制管理器&#xff0c;来加载和卸载场景&#xff0c;以实现场景之间的切换。 2、思路 Fade To Back是黑色的过渡场景&#xff0c;透明度逐渐变为1。 Fade To Transparent To Show Scene&#xff1a;黑色消失的过渡场景&#xff0c;透明度逐渐变为0. 事件触发…

Java小白入门教程:Object

目录 一、定义 二、作用 三、使用场景 四、语法以及示例 1、创建Object类型的对象 2、使用 toString()方法 3、使用 equals()方法 4、使用 hashCode()方法 5、使用 getClass()方法 6、使用 clone()方法 7、使用 finalize()方法 一、定义 在Java中&#xff0c; object…