GODOT游戏引擎简介,包含与unity性能对比测试,以及选型建议
GODOT,是一个免费开源的3D引擎。本文以unity作对比,简述两者区别和选型建议。由于是很久以前写的ppt,技术原因视频和部分章节丢失了。建议当做业务参考。
GODOT目前为止遇到3个比较重大的基于,第一个是oprea的合作奖,第二个是用支持c#换来的微软的投资,第三个是虚幻商城的支持
虽然我总结了一些特点(优点),但说到底最大的优势还是免费开源,MIT协议
GODOT是支持脚本混编的。不同语言支持程度不同,有些api不对其他语言支持。所以GDScript是绕不开的必学科目
此处不贴视频了。你可以去b站看,有很多。
godot的编辑器提供了开发流程所必要的工具链。比如调试工具profiler、可视化shader编辑器、帧动画编辑器、骨骼绑定编辑等。
与unity相比没什么太大差别,只是有些地方名称不同而已。比如资源树中,unity的每个对象都是gameobject,而godot是node。功能、用法都没毛区别
下面看看渲染性能表现。
测试方式:用比较经典(懒惰)的方式,递增物理方块同屏渲染
测试移动设备:小米平板4
以下是godot和unity在不同物体数量下的帧率对比:

3d渲染结论:unity不愧是3d手游首选引擎,3d渲染性能强悍,碾压godot。可以看到当场景中存在3000个物体后,unity还能达到18帧,而godot已经卡的上气不接下气

接着看看2d的渲染性能表现

在渲染2d物体时结论出现了翻转,在同屏渲染1500物体时,godot能到到51帧,而unity只有1帧。这是因为unity在2d渲染时,使用的是“伪渲染”,既物体本质是3d的。而godot是实打实的2d物体。
tips: 为毛看起来两个引擎的2d渲染性能看起来都不如3d ?
这是因为3d物体没有加贴图,所有像素的颜色值都是一个颜色,计算消耗仅是法线 * 颜色 * 光照。
而2d物体加了贴图,虽然每个方块看起都较小,但为了更快的展现效果贴了比较大的贴图。这样就增加了很多纹理寻址的性能消耗。
除了脚本语法的编写差异,其他差异基本都在表中。
还要补充一点,godot的android调试发包是必须加key的。这一点不如unity省事。
关于选型
1. GODOT更适合2d项目开发
这个结论来自于性能测试,2d渲染性能表现亮眼。在制作一些需要巨量渲染,诸如割草类型游戏的项目时,2d的优越渲染性能是唯一关注点。
2. GODOT更适合中级以上工程师参与开发
该结论来源于
1. godot的工具链虽然提供也比较完整,但质量偏下,bug层出不穷
2. 插件少、不全面且质量偏下
3. 版本更新较慢、社区支持有限
很多情况下需要开发者利用自身丰富的开发经验来填补引擎支持的不足和缺陷
3. GODOT适合对免费开源有强制需求的项目
godot使用mit协议,你可以任意修改底层代码进行商业销售。而其他引擎存在各种不易知道的暗坑和收费陷阱。比如unity,在某些硬件设备下需要对用户,对你没看错,是用户收取使用费。
4. GODOT更适合中小型项目开发
与其他成熟商业引擎相比,godot在社区活跃、插件广度、教程数量上都比较匮乏。在遇到比较尖锐的问题时,诸如图形缓存复用、黑屏定位时往往不会轻易找到解决办法。另外godot的编辑器质量堪忧,即使在最新的3.1版本也存在正常保存项目会损坏场景文件的情况。还有丢失资源时,偶尔还会出现无提示崩溃情况。这些都为大型项目带来不可预估的延期风险和开发难度。所以推荐中小型项目使用
没了
相关文章:

GODOT游戏引擎简介,包含与unity性能对比测试,以及选型建议
GODOT,是一个免费开源的3D引擎。本文以unity作对比,简述两者区别和选型建议。由于是很久以前写的ppt,技术原因视频和部分章节丢失了。建议当做业务参考。 GODOT目前为止遇到3个比较重大的基于,第一个是oprea的合作奖,…...

Add-in Express for Microsoft Office and Delphi Crack
Add-in Express for Microsoft Office and Delphi Crack 适用于Microsoft Office和Delphi VCL的Add-in Express使您能够在几次点击中为Microsoft Office开发专业插件。它生成基于COM的项目,这些项目包含Microsoft Office外接程序或智能标记的所有必要功能࿰…...

opencv基础-34 图像平滑处理-2D 卷积 cv2.filter2D()
2D卷积是一种图像处理和计算机视觉中常用的操作,用于在图像上应用滤波器或卷积核,从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中,图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动,对每个局部区…...
webSocket 与传统的 http 有什么优势
webSocket 与传统的 http 有什么优势 当页面中需要观察实时数据的变化(比如聊天、k 线图)时,过去我们往往使用两种方式完成 第一种是短轮询,即客户端每隔一段时间就向服务器发送消息,询问有没有新的数据 第二种是长轮询…...

如何测试Linux磁盘的读写速度
在Linux系统中也有很多命令可以测试硬盘的读写速度指标。以下是几个常用命令(注意:在执行测试命令之前,请务必备份数据以避免数据丢失! 1、dd 命令 首先挂载磁盘 mount /dev/sdb /testdd 命令可用于进行硬盘读写速度测试。 例…...
Spring Data Redis:在Java中操作Redis
目录 一、Spring Data Redis使用方式 1.1 介绍 1.2 配置 1.3 RedisTemplate 二、环境搭建 2.1 导入Spring Data Redis的maven坐标 2.2 配置Redis数据源 2.3 编写配置类,创建RedisTemplate对象 三、操作常见类型数据 3.1 操作字符串类型数据 …...

Android 面试重点之Framework (Handler篇)
近期在网上看到不少Android 开发分享的面试经验,我发现基本每个面经中多多少少都有Framework 底层原理的影子。它也是Android 开发中最重要的一个部分,面试官一般会通过 Framework底层中的一些逻辑原理由浅入深进行提问,来评估应聘者的真实水…...
基于Node.js的后台管理系统的数据表格导出下载
基于Node.js的后台管理系统的数据表格导出下载 今天在工作的时候接触到一个需求,就是现在有一个简单的后台管理系统是基于node.js来实现的,现在需要将其中的一个表格数据下载下来。乍一听还以为这个是一个简单的需求,以为只要简单的一个小时…...

渗透攻击方法:原型链污染
目录 一、什么是原型链 1、原型对象 2、prototype属性 3、原型链 1、显示原型 2、隐式原型 3、原型链 4、constructor属性 二、原型链污染重现 实例 Nodejs沙箱逃逸 1、什么是沙箱(sandbox) 2、vm模块 一、什么是原型链 1、原型对象 JavaS…...

第四章 kernel函数基础篇
cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…...

JVM:运行时数据区域(白话文)
最近有时间在看一本<深入了解Java虚拟机>的书籍,这本书是一个中国人,名叫周志明的人写的。相比于其他翻译过来的技术书籍,这本书还是挺通俗易懂的。先前有和彬哥在聊,他说如果是自己一个人看的话会很枯燥,很难坚…...

Go语言并发编程(千锋教育)
Go语言并发编程(千锋教育) 视频地址:https://www.bilibili.com/video/BV1t541147Bc?p14 作者B站:https://space.bilibili.com/353694001 源代码:https://github.com/rubyhan1314/go_goroutine 1、基本概念 1.1、…...
CSS革命:用Sass/SCSS引领前端创新
目录 前言SCSSSassSass 和 SCSS 的区别 前言 在现代的前端开发中,CSS已成为呈现网页和应用程序样式的核心。然而,原生的CSS语法在大型项目中可能变得混乱、冗长且难以维护。 为了解决这些问题,SCSS(Sass CSS)和Sass&am…...

MAPPO 算法的深度解析与应用和实现
【论文研读】 The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 说明: 来源:36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks. 是NIPS文章,质量有保障&…...
API接口的涉及思路以及部分代码
在现代软件开发中,API(Application Programming Interface)接口扮演了一个至关重要的角色。通过API接口,不同的应用程序、系统或服务之间可以进行数据交换和相互调用,实现功能的扩展和集成。本文将探讨API接口的设计思…...

Stable Diffusion无需代码连接QQ邮箱的方法
Stable Diffusion用户使用场景: 电商商家在产品测试阶段,通过微信社群日常收集用户对产品设计的反馈,包括对产品的修改建议或外观设计等,并将这些反馈上传至集简云小程序。然后,他们使用Stable Diffusion AI工具生成图…...

Excel表格(一)
1.单一栏的宽度和高度设置 2.大标题的跨栏居中 3.让单元格内的文字------自动适应 4.序号递增 5.货币符号 6.日期格式的选择 选到单元格,选中对应的日期格式 7.自动求和的计算 然后在按住回车键即可求出当前行的金额 点击自动求和 8.冻结表格栏 9.排序 1.单栏排序 …...

详细介绍渗透测试与漏洞扫描
一、概念 渗透测试: 渗透测试并没有一个标准的定义,国外一些安全组织达成共识的通用说法;通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动的主动分析…...

Scikit-learn聚类方法代码批注及相关练习
一、代码批注 代码来自:https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py import numpy as np from sklearn.cluster import DBSCAN from sklearn import metrics from sklearn.datasets …...

C#程序的启动显示方案(无窗口进程发送消息) - 开源研究系列文章
今天继续研究C#的WinForm的实例显示效果。 我们上次介绍了Winform窗体的唯一实例运行代码(见博文:基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章 )。这就有一个问题,程序已经打开了,这时候再次运行该应用程序,…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...