老程序员的数字游戏开发笔记(一) —— 世界从Godot开始

目录

开篇废话

GDScript 是什么

创建 GDScript 背后的动机是什么

Godot 会支持【此处插入 FMOD、GameWorks 等闭源 SDK 的名字】吗?

是否能用 Godot 创建非游戏应用?

Godot 使用的用户界面工具包是什么?

为什么 Godot 使用 SCons 构建系统?

为什么 Godot 不使用异常?

Godot使用 ECS(实体组件系统)吗?

为什么 Godot 不强制用户实现 DOD(面向数据设计)?

Godot的特性

编辑器

渲染

2D 图形

2D 工具

2D 物理


程序员的洁癖 - 希望使用一套自己可以完全掌控的工具创造产品!

开篇废话

政安晨作为一名资深老猿,我由衷地推荐Godot,未来我将带着小伙伴们一起,开始Godot数字游戏开发的历程!

有小伙伴们会说了,这都AI时代了,游戏开发还有前途吗?

政安晨:这不是前不前途的问题,也不是钱不钱途的问题,人类的文明是从游戏中一路过来的,这里面有着人类文明最根本的智慧。如果世界全部演变成硅基形态,也许会形成它们自己的游戏之道。但是,作为碳基生命的我们,生活在以碳基生态为主要形式的地球上,小伙伴们不要否认我们作为碳基高等智慧生命在地球存在上的意义。游戏方式或许会成为AI时代的文明表达,这种趋势已经开始显现。这个或许才是我们要坚持下去的原因,也是找到志同道合者的基础。

这些年,我本人一直在关注Godot的发展,也一直在思考Godot这款游戏引擎在产品应用上的价值,它也许并不是最强大的,但却可能会是最健康的。感兴趣的程序员和爱好者们,可以关注它,以及它所体现出的思想火花,未来,我也会为大家解析和演绎如何应用它们。

这篇仅是一个笼统的介绍,目的仅仅是帮助小伙伴们快速预览,没有别的目的,了解Godot的小伙伴可以不用往下看了。 

GDScript 是什么

GDScript 是 Godot 所集成的一门是从零开始构建的脚本语言,其目的就是用最少的代码将 Godot 的潜力最大化地发挥出来,让新手和专业开发人员都能尽可能快地利用 Godot 的优势进行开发。如果你曾经用类似 Python 这样的语言写过任何东西,那么你就会对 GDScript 感到得心应手。

使用 GDScript 有不少原因,特别是你在进行原型设计时、在项目的 alpha/beta 阶段、或者项目不是 3A 大作时会用到它,但 GDScript 最突出的优势就是整体复杂度得到降低

为 Godot 创建一个紧密集成的自定义脚本语言的初衷有两点:

首先,它减少了启动和运行Godot 所需的时间,使开发人员沉浸于引擎并专注生产力;

其次,它减少了维护的总体负担,降低了问题的维度,让引擎开发者专注于排除错误并改进与引擎核心相关的功能,而不是花费大量时间试图在一大堆语言中获得一小部分增量功能。

由于 Godot 是开源项目,因此 GDScript 的开发从一开始就必须优先考虑更加集成、无缝的体验,而不是通过支持大多人熟悉的编程语言来吸引更多用户——特别是在支持那些大多人熟悉的语言会导致更糟糕的开发体验时。

我们理解你更想在 Godot 中使用其他语言。话虽如此,如果你还没试过 GDScript,那就先试它个三天。就像 Godot 一样,一旦你看到它的强大之处与开发之迅速,我们相信,你定将会对 GDScript 刮目相看。

创建 GDScript 背后的动机是什么

在早期,引擎使用 Lua 脚本语言。Lua 高性能来源于 LuaJIT,但是创建与面向对象系统的绑定(通过使用回退)是非常复杂且缓慢的,并且需要大量代码。在用 Python 进行了一些实验后,它也被证明是难以嵌入的。

为 Godot 创建自定义脚本语言的主要原因有:

  1. Godot 使用多线程,而大多数脚本虚拟机对线程的支持不佳(Lua、Python、Squirrel、JavaScript、ActionScript 等)。

  2. 大多数脚本语言(Lua、Python、JavaScript)的虚拟机没有很好地支持类扩展,适配 Godot 工作方式的效率极低。

  3. 许多现有语言的 C++ 绑定接口都非常糟糕,会产生大量代码、错误、瓶颈,而且效率普遍低下(例如 Lua、Python、Squirrel、JavaScript 等)。我们希望专注于一个更好的引擎,而不是大量的缝合。

  4. 没有原生的向量类型(Vector3、Transform3D 等),导致使用自定义类型实现时,性能大大降低(Lua、Python、Squirrel、JavaScript、ActionScript 等)。

  5. 在大部分解释型编程语言(Lua、Python、JavaScript、ActionScript 等)中,垃圾收集器会导致延迟或不必要的大内存使用。

  6. 难以与代码编辑器集成从而提供代码补全、实时编辑等功能(其他语言都这样)。

GDScript 正是为了减少上述问题,同时防止其他更多问题而设计的。

Godot 会支持【此处插入 FMOD、GameWorks 等闭源 SDK 的名字】吗?

Godot 的目标是创建一个自由开源、MIT 许可、模块化和可扩展的引擎。核心引擎开发社区没有计划支持任何第三方、闭源或专有 SDK,因为集成这些 SDK 会违背 Godot 的精神。

正因为 Godot 是开源和模块化的,所以没有什么能阻止你或其他任何感兴趣的人将这些库添加为模块,并以开源或闭源的方式在你的游戏中使用他们。

如欲了解如何支持你使用的 SDK,请查看下面的插件问题。

如果你知道 Godot 尚不支持但提供自由和开源集成的第三方SDK,请考虑自己开始集成工作。Godot 不属于个人;它属于社区,它与像你一样雄心勃勃的社区贡献者一起成长。

是否能用 Godot 创建非游戏应用?

是的!Godot 具有广泛的内置 UI 系统,其较小的软件包可以使它成为 Electron 或 Qt 等框架的合适替代品。

当创建一个非游戏的应用程序时,确保在项目设置中启用 低处理器模式 以减少CPU和GPU占用。

Godot 使用的用户界面工具包是什么?

Godot 不使用标准的 GUI 工具箱,如 GTK、Qt 或 wxWidgets。相反,Godot 使用自己的用户界面工具包,使用 OpenGL ES 或 Vulkan 进行渲染。这个工具包以控件节点(Control)的形式暴露出来,用于渲染编辑器(用 C++ 编写)。这些控制节点也可以在 Godot 支持的任何脚本语言的项目中使用。

这个定制的工具包使它能获益于硬件加速,并在全平台上拥有一致的外观。最重要的是,它不必处理 GTK 或 Qt 所带来的 LGPL 许可注意事项。最后,这意味着 Godot 在“自产自用”,因为编辑器本身就是 Godot UI 系统中最复杂的用例之一。

为什么 Godot 使用 SCons 构建系统?

Godot 使用 SCons 构建系统。近期没有改用其他构建系统的计划。我们选择 SCons 而不是其他构建系统的原因有很多,例如:

  • Godot 可以针对多种不同的平台进行编译:所有 PC 平台、所有移动平台、各种游戏主机、WebAssembly。

  • 开发者们经常需要同时将代码编译到多个平台上,或者同一个平台的不同架构上,但他们负担不起每次都要重新配置和重构项目。SCons 可以毫不费力地完成此任务,而不会破坏构建。

  • 无论对项目做出多少修改、配置、增加、删除之类的事情,SCons 都不会 把构建工作搞砸。

  • Godot的构建过程并不简单。几个文件由代码生成(绑定器),其他文件被解析(着色器),而其他文件则需要提供自定义( 模块)。这需要复杂的逻辑,而该逻辑更容易用实际的编程语言(如Python)编写,而不是使用基于宏且仅限于构建过程的语言。

  • Godot 的构建过程大量使用了交叉编译工具。每个平台都有特定的检测过程,需要为各个平台编写特殊代码,将这些作为特殊情况处理。

如果你想要自己构建 Godot,放宽心态, 至少稍微熟悉一下这个构建系统。

为什么 Godot 不使用异常?

我们相信无论如何游戏都不应该崩溃。如果发生意外情况,Godot将打印一个错误(甚至可以追溯到脚本),但之后它会尽可能优雅地恢复,并继续前进。

此外,异常会显著增加可执行文件的二进制大小,并且导致编译时间增加。

Godot使用 ECS(实体组件系统)吗?

Godot不使用 ECS 而是依赖于继承。虽然没有一种普遍的更好的方法,我们发现使用继承的效率已经可以满足于绝大多数使用场景。

也就是说,没有什么能阻止你在项目中通过使用脚本创建子节点来使用组合。这些节点可以在随后的运行时中添加和删除,以实现动态添加和删除。

为什么 Godot 不强制用户实现 DOD(面向数据设计)?

尽管 Godot 的内部实现中尽可能的使用了缓存一致性,但我们认为不应该强迫用户使用 DOD。

DOD 主要是缓存一致性优化,只有在每帧需要处理数以万计的对象,并且做出的修改较少时,才能够提供显著的性能提升。假如你每帧要移动的精灵或敌人只有几百个,那么 DOD 并不会带来有意义的性能提升。在这种情况下,你应该考虑别的优化手段。

绝大多数游戏都不需要这个, 并且Godot提供了方便的辅助工具来完成大多数情况下的工作.

如果一个游戏的确需要处理数量较多的游戏对象,那么建议使用 C++ 和 GDExtensions 处理那些需要高性能的部分,使用 GDScript(或 C#)来负责游戏的其它部分。

Godot的特性

编辑器

特性:

  • 场景树编辑器。

  • 内置脚本编辑器。

  • 支持 Visual Studio Code、VIM 等外部文本编辑器。

  • GDScript 调试器。

    • 从 4.2 版本开始支持多线程调试。

  • 可视化(性能)分析器能指出在渲染管线中 CPU 与 GPU 在每个步骤花费的时间。

  • 性能监视工具,包括自定义性能监视器。

  • 脚本热重载。

  • 场景热编辑。

    • 更改会在编辑器中生效并且会在关闭当前项目后保留。

  • 远程检查器。

    • 在关闭正在运行的项目后,更改不会被反映在编辑器中,也不会被保留。

  • 实时摄像机复制。

    • 移动编辑器中的摄像头,并在正在运行的项目中查看结果。

  • 内置离线类参考文档。

  • 使用由社区贡献的支持数十种语言的编辑器。

插件:

  • 可以从资产库下载编辑器插件,扩展编辑器的功能。

  • 使用 GDScript 来 创建属于自己的插件,从而为引擎添加新功能或提高你的工作流速度。

  • 在项目管理器中,从资产库下载项目并直接导入。

渲染

提供 3 种渲染方法(运行在 2 种渲染驱动上):

  • Forward+,在Vulkan 1.0 以上运行(具备可选的 Vulkan 1.1和 1.2 功能)。仅适用于桌面平台的最先进图形后端。在桌面平台上默认使用。

  • Forward Mobile,在 Vulkan 1.0 以上运行(带有可选的 Vulkan 1.1 和 1.2 功能)。该功能较少,但渲染简单场景更快。适用于移动和桌面平台。在移动平台上默认使用。

  • Compatibility(兼容),在 OpenGL 3.3、OpenGL ES 3.0 和 WebGL 2.0 以上运行。最低级的图形后端,适合低端桌面和移动平台。在 Web 平台上默认使用。

2D 图形

  • 精灵、多边形和线条渲染。

    • 用于绘制线和多边形的高级工具,例如Polygon2D和Line2D,支持纹理。

  • AnimatedSprite2D 辅助制作动画精灵。

  • 视差层。

    • 伪 3D 支持,可在编辑器中进行预览。

  • 带有法线贴图和镜面反射贴图的 2D 光照。

    • 2D 点光源(全向灯/聚光灯)和平行光源。

    • 硬阴影或软阴影(可根据每个光源进行调整)。

    • 自定义着色器可以访问一个基于 LightOccluder2D 节点的,由实时 SDF 表示的二维场景,它可以用于改进二维照明效果,包括二维全局光源。

  • 字体渲染使用位图,光栅化使用 FreeType 或多通道有符号距离场(MSDF)。

    • 位图字体可以使用 BMFont 等工具导出,也可以从图像导入(仅适用于等宽字体)。

    • 动态字体支持单色字体以及彩色字体(例如用于表情符号)。支持的格式有 TTF、OTF、WOFF1 和 WOFF2。

    • 动态字体支持具有可调整宽度和颜色的可选字体轮廓。

    • 动态字体支持可变字体和 OpenType 功能,包括连字(ligatures)。

    • 当字体文件缺少粗体和斜体样式时,动态字体支持模拟这些样式。

    • 动态字体支持超采样, 以在更高的分辨率下保持字体的清晰度.

    • 动态字体支持亚像素定位(subpixel positioning),使字体在小尺寸下更清晰。

    • 动态字体支持 LCD 亚像素优化,使字体在小尺寸下更加清晰。

    • 带符号距离场字体可以在任何分辨率下进行缩放,而无需重新光栅化。与单色带符号距离场字体相比,利用多通道可使带符号距离场字体更好地缩放至更小尺寸。

  • 基于 GPU 的 粒子,支持 自定义粒子着色器。

  • 基于 CPU 的粒子。

  • 为了更好的辉光功能,可选择 2D HDR 渲染 。

2D 工具

  • TileMap 用于由 2D 图块构建的关卡设计。

  • 内置平滑和拖动边距的 2D 相机.

  • 用于代表 2D 空间中的一条路径的 Path2D 节点。

    • 可以在编辑器中绘制或者通过程序生成。

    • 用于使节点跟随一条Path2D的PathFollow2D 节点.

  • 2D 几何辅助类。

2D 物理

物理体:

  • 静态物体。

  • 动画体(用于仅通过脚本或动画移动的物体,如门和平台)。

  • 刚体。

  • 角色体。

  • 关节。

  • 用以检测实体进入或离开的区域.

碰撞检测:

  • 内置形状:线条,框体,圆圈,胶囊,世界边界(无限平面)。

  • 碰撞多边形(可以人工绘制,或者在编辑器中根据精灵生成)。

等等不再赘述

文档快捷入口

以下内容不再赘述,为了文档的完整性,完成这篇文档介绍后,逐渐就会进入开发实战了。

Godot 文档 – master 分支 — Godot Engine (4.x) 简体中文文档欢迎来到 Godot 引擎 的官方文档,Godot 引擎是一款自由开源、由社区驱动的 2D 和 3D 游戏引擎!如果你初次阅读本文档,我们建议你读一下 简介页面 ,以对本文档的内容有一个整体的了解。 使用下方及侧边栏中的目录可以方便地找到你感兴趣的主题文档,你也可以在左上角搜索感兴趣的内容。 参与进来: Godot 引擎是由志愿者社区驱动的开源项目。文档团队会听取你的反馈,以此来改进教程和类...icon-default.png?t=O83Ahttps://docs.godotengine.org/zh-cn/4.x/index.html上面是Godot中文文档的地址,小伙伴们收藏使用。

 



嘻嘻。

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

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

相关文章

抖音视频下载

对于特别喜欢的视频有时需要珍藏,下文方法可能会帮到你,但要注意尊重版权和遵守相关声明。 Edge浏览器打开抖音短视频,按F12,选择 网络;筛选条件?a;双击搜索结果打开视频;选择想要的视频&…

镜像问题(k8s部署考试系统)

如果使用containerd拉取不到镜像的话,就使用docker 1.修改decker的镜像源 [rootk8s-master ~]# vim /etc/docker/daemon.json { "registry-mirrors": [ "https://do.nark.eu.org", "https://dc.j8.work", …

SSM 传统工艺品销售网站---附源码74714

摘 要 近年来,信息网络迅猛推进,其具有灵活方便、传递消息速度快等优点,这一新兴媒体日渐兴盛,已经成为人们日常生活获取信息一个重要手段。从08开始,电商行业如春风吹过后的小草,呈现出一片蓬勃地发展态势…

人力资源管理系统员工组织与微软AD域服务系统集成案例

一、项目背景 上海某电路半导体有限公司主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片等。 公司内部HR人力资源管理系统统一进行人员批量预入职和同步等流程,由SAP PO平台进行中间管理,在微软AD域系统上创建人员&#xff0c…

若依plus-cloud nacos yml 动态获取 配置内容

这是剑走偏锋的写法。 直接上代码 在nacos中配置一个ruoyi-cms.yml 内容中有cms:filepath:******* springcloud配置 package org.dromara.cms.entity;import lombok.RequiredArgsConstructor; import org.springframework.core.env.Environment; import org.springframewo…

优化IDEA卡顿,提示慢的问题,亲测有效!

1、优化JVM的参数 以下文件在idea安装目录的idea64.exe.vmoptions文件中。 一般来说我们只需要调整-Xms、-Xmx、-XX:ReservedCodeCacheSize三个即可,根据电脑的实际内存去调,我的电脑是48G内存,调到了 -Xms4096m (堆初始内存大小) -Xmx8192m…

基于图像的端到端方案实现小车在模拟城市场景中的自主导航

基于图像的端到端方案实现小车在模拟城市场景中的自主导航 FSD(Full Self-Driving)是特斯拉公司推出的一种自动驾驶技术,旨在实现完全自主的驾驶体验。FSD系统依靠大量的数据和高级的机器学习算法,结合车载传感器(如摄…

共模干扰的形成和滤除

1、共模就是共同对地的干扰: 如图,我们可以看到共模的原理图。UPQ就是共模电压,ICM1 ICM2 就是共模电流。 ICM1 ICM2 大小不一定相同,方向相同。 2、共模信号和差模信号的区别: 通常电源线有三根线:火线L、…

红帽RHCA认证什么级别?红帽认证等级细分攻略

Linux 系统作为开源软件的杰出典范,于服务器、云计算、大数据等诸多领域占据着至关重要的地位。对于矢志在 Linux 领域精研深耕的技术人才而言,红帽认证无疑是擢升技能与职业竞争力的关键密钥。今日,我们即将深度剖析 RHCA 红帽认证架构师这一…

[产品管理-4]:NPDP新产品开发 - 2 - 战略 - 制定企业经营战略目标的结构化方法与工具

目录 一、SWOT分析工具 1、SWOT分析工具概述 2、SWOT分析与企业战略目标制定的关系 3、SWOT分析在企业战略目标制定中的应用实例 4、SWOT分析的改进与应用建议 二、P E S T L E 分 析:外部环境分析 2.1 概述 1. 政治因素(Political) …

建筑机器人通用操作系统设计方案

建筑机器人操作系统通用发行版概述 1. 基础版(Entry Level) 目标用户:小型建筑公司、DIY爱好者或初学者。特点:提供基础的机器人控制和任务管理功能,支持简单的自动化作业流程,如基础的混凝土搅拌、物料搬…

盘点那些初级软件测试面试题汇总

一、请描述如何划分缺陷与错误严重性和优先级别? 给软件缺陷与错误划分严重性和优先级的通用原则: (1)表示软件缺陷所造成的危害和恶劣程度。 (2)优先级表示修复缺陷的重要程度和次序。 严重性&#xf…

探索广东省自闭症寄宿学校的独特教育模式

在广东省这片充满活力的土地上,自闭症儿童的教育问题日益受到社会各界的关注。随着特殊教育领域的不断发展,一系列针对自闭症儿童的寄宿学校应运而生,其中,广州的星贝育园自闭症儿童寄宿制学校以其独特的教育模式,成为…

性能测试-性能分析与调优原理总结

性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。 从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP ),还是…

Unity 粒子系统参数说明

一、Particle System 1. Duration(持续时间) 粒子系统运行一次所需的时间。它决定粒子系统持续播放的时间长度。 2. Looping(循环播放) 如果启用,粒子系统将在播放完一次后自动重新开始播放,直到你停止它…

IP-Adapter学习

参考:https://baijiahao.baidu.com/s?id1803373544569190578&wfrspider&forpc IP-Adapter 是 SD中比较重要的controlnet,由腾讯公司出品。主要原理:提取图像特征,并嵌入预训练文本,最终加入到扩散图像中。简…

明星代言推广的6种优势,打造品牌巅峰!

在当今的商业社会中,品牌推广成为了企业发展不可或缺的一环。对于许多企业来说,明星代言已经成为了一种常见的推广策略。本文将介绍明星代言推广的六种优势,帮助企业了解并充分利用这一策略,从而打造品牌的巅峰! 1. 塑…

python中如何打印日志信息推荐logaid库(强大的日志库)

一、安装 pip install logaid二、使用 只打印,不保存 from logaid import loglog.info(hello world) log.error(hello world) log.warning(hello world) log.fatal(hello world,123,{},[],False)开启超级print from logaid import log log.init(print_proTrue)prin…

教你制作动态可以点击的PDF样本图册

普通的PDF文档虽然方便,但静态的页面往往难以满足一些展示和功能性的需求。今天,就让我来带你了解一下如何制作动态可点击的PDF样本图册,让我们的PDF文档焕发新的活力! 首先,我们需要明确制作动态可点击PDF的目的是什…

F12抓包11:UI自动化 - Recoder(记录器)

课程大纲 使用场景(导入和导出): ① 测试的重复性工作,本浏览器录制并进行replay; ② 导入/导出录制脚本,移植后replay; ③ 导出给开发进行replay复现bug; ④ 进行前端性能分析。 1、录制脚…