本人已经入手了 Godot 3 beta 阅读了文档并做了一些深度体验,总结4个字:相当期待!
终于除了 Unity 和 UE 以外,又多了一个可选的带编辑器的多平台发布免费引擎了!
废话不多说,我先说说适用人群并从中去介绍它的优点吧:
新手开发者
我觉得 Godot 的上手门槛相对于 Unity 来说更为简单,Godot 使用的是自家研发的类 Python 的脚本语言:GDscript,上手难度是低于 C#的,而且还支持脚本更改实时同步,不需要重新编译就可以立即看到效果,这对新手开发者理解 API 及运算的敏锐度等都能够带来相当直观的提升。
(这里补充一下:很多人不理解为什么开发者不用 LUA 等已经广为所用的脚本,非要作死搞什么自己的脚本语言?事实上 Godot 在最初是用的 LUA,但是将 LUA 绑定到面向对象为主的系统框架需要十分庞大的代码量,也很难嵌入到 Python 之中,如果想知道更全面的 GDScript 历史可以点此链接:GDScript)
还有,相信用过 Unity 的人都知道 Inspector 的拓展其实是比较麻烦的,你苦读多日好不容易熟悉了大体的 API 之后,当需要拓展 Editor 之后才发现打开了另一扇罪之门,这得多可怕?像什么 PropertyDrawer,EditorWindow 等,深入到工具层面的什么 EditorGUI,EditorUtility 等等,才有你好受的。
Godot 就不会有这问题,首先你是不需要单纯为了某个 getset 去搞一个 CustomEditor 的,你只需要在脚本的开头写上一个 tool:
tool 可以理解为强大版的 ExecuteInEditMode,之后你所有 Inspector 里的数值都可以触发 set 方法了!是不是很简单?
如果你想要搞什么自定义窗口,那不要太简单,你也不需要去学什么新的 API,像那个某 U 还要学 GUI,还有相对简单点的什么 GUILayout,多麻烦!
在 Godot 里,你只要知道怎么做游戏 UI,就知道怎么搞自定义窗口,因为整个编辑器和游戏 UI 都是一个框架底下的产物!
不想写程序?没关系,Godot 的第二种类蓝图的可视化编程就是你的最佳选择啦!而且 Shader 都有可视化编辑器(不过3.0先暂时拿掉了,3.1才会回归)!再看看旁边那个某 U,嗯……没事,人家资源商店强悍嘛,你有钱也有一堆插件任你选。
想要完全免费游戏引擎的开发团队
由于 Unity 和 Unreal 对引擎都拥有绝对的拥有权,所以在免费使用之余都别忘了,他们拥有向收费的权利。Unity 是在公司达到10万美金收入之后,就需要付费1500美元购买专业版;而 Unreal 则是在你获得首个3000美金后,往后的收入都要支付5%作为版权费。Godot 则是基于 MIT 的完全免费引擎,自然不会出现事后要补钱的问题啦!
想要相对成熟,并且更规范 2D 游戏开发环境的开发团队
用过 GMS 等 2D 引擎的人再去用 Unity2D 开发游戏都肯定会挣扎过,因为 Unity2D 始终不是正经的 2D 游戏开发环境,而是基于 3D 空间的伪 2D 开发环境,很多时候想要实现一个 Pixel Perfect 的开发环境,什么以像素点为移动单位,还有获取 Sprite 在空间中的绝对宽高都是相对麻烦的。
Godot 除了提供了独立的 2D 开发环境以外,也有自带的 Tilemap 制作工具,甚至能够胜任六边形,2.5D 等的开发流程,而且在 Shader 编程方面,2D 也有相对简化的版本,所以在开发上可以节省不少时间和劳力成本。
此外,Godot 也有比 Unity 强大的动画编辑工具,不仅支持骨骼 Rig,还支持红蓝的洋葱模式,往后也会支持 FFD,整体来说对 2D 游戏开发提供了相当不错的开发环境。
非3A 级开发,并对运行效率有追求的开发团队
Unity 始终是个闭源的引擎,一旦遇到了难以逾越的效率瓶颈就很难处理,而且很多时候插件也都是基于 c# 脚本开发的,运行效率相比原生的肯定会大打折扣。而 Godot 呢?Godot 开源!Godot 开源!Godot 开源!重要的事情说三遍!开源意味着什么?可定制化啊!先不说直接把 Godot 作为固件 C++开发这种极端的方式,Godot 本身提供了 GDNative 这一管道。这是啥呢?GDNative 允许开发者在引擎里直接通过 C,C++,或者 Python 等语言直接调用引擎所有的 API,或是使用第三方插件,其效率可以说十分趋近于原生开发了!Procedural Generation 等等那些运算量极大的机制,你在 Godot 里效率真是想提高多少就能提高多少好吗?
非土豪的中小型独立的 Unity 开发者
没错,说的就是我你他这些中小型独立开发者,不想学 GDScript?也不想用可视化编辑器?嗯,告诉你,Godot3.0 允许你用第三种语言开发,那就是你常用,陪伴你数载的 C#!惊不惊喜?意不意外?Godot 3.0 使用了最新版本的 Mono,并且由微软内部的研发人员直接参与(这是微软赞助 Godot 的附加条件,为了让更多人使用 C#),表现自然十分稳定!如果你和我一样,并不是所有插件都能想买就买,在空旷的环境底下,我真的十分建议尝试一下 Godot。而且,Unity 的 Prefab 真的是让人十分无奈,为什么 Nested Prefab 等了 N 个版本了到现在都没有?而 Godot 的 Scene System 就真的有惊喜了,Unity 是 Scene + Prefab 的框架,而 Godot 所有的物体和场景都是 Scene,而且所有的 Scene 都可以继承,所以什么基础 Scene 啊,Nested Prefab 啊,到了 Godot 都不是问题!你只需要个别决定哪个 Node(类似于 Unity 里的 Component)是要独立于其他的同类就可以了,是不是很简单?
除了上述所说的优点,其实 Godot 还有很多优点,例如可发布 Html5,发布体积小,引擎体积才20多 MB,PBR,全局光照,GPU Based 粒子系统,还有今天公布的 LightMapping等等,都能成为各大开发者入坑的理由。
缺点
好了,吹了一堆,是时候也要来说一些不好听的了:
一、太年轻
是的,3.0加了一堆新功能,甚至整个渲染底层都改了一遍,可想而知 Bug 自然会多如山,而且部分的编辑器体验也不太友好,不过目前毕竟是 Beta 版本,希望正式版可以有或多或少的进步吧。
二、在国内发布很繁琐
引擎的体积会如此之小,原因是 Godot 把发布的编译器先拿掉了,所以当需要发布时候,需要重新联网去下载 Godot 发布模板(Export Template),这时候问题就来了……下载速度会极慢!不科学上网的还真的很难解决。当然你也可以通过官方教程,去下载一个又一个的编译器再使用命令行去完成编译,但不管怎么说,还是比较麻烦的。
三、2DSprite 不支持 sliced,tiled 等类型
这点还是比较伤心的,尤其在 Unity 加入这些功能以后再过来用,就会觉得有些失望。虽然可以用脚本去实现这个效果,但是用起来始终不太舒服,感觉也会有些混乱。
四、使用者较少,社区活跃度不足,缺乏有说服力的 Showcase
相比 Unity 和 Unreal 这些使用者较多的并更为成熟的引擎来说,Godot 遇到问题很难找到解决方案,尤其是最新的 Godot3.0,虽然目前可以通过 IRC,Reddit,Discord 的方式向社区提问,但是反馈一般比较慢,而且这些渠道国内都不常用,再加上始终没有说服力强大的 Showcase,所以也很难说服更多的人去使用 Godot,这可能会陷入不良的循环。
总结
其实从各种层面来说,Godot 都还是十分年轻的引擎,虽然问题有很多,但是他还是相当适合对某些方面有特殊需求或者真的很需要绝对免费的游戏引擎的独立开发者。如果单从引擎的功能来说,Godot3 不见得比 Unity 落后多少,但是 Unity 的资源商店太过于强大了,使得建立原型实在太过于便利,这是缺乏 Showcase 的 Godot 望尘莫及的。但是我相信随着时间的迭代以及优秀的 Showcase 出现,Godot 肯定会在独立游戏圈带起不小的旋风的。(也有人说用 Unity 做原型再到 Godot 里做游戏,我觉得这也是不错的选择哦)
希望楼主能在中国第一Godot布道师的路上继续前进. 哈哈哈
@大城小胖:哈哈哈。。最近国外Godot的教程越来越多了,有机会搞一搞搬运
3beta在哪下?官网只看到2.1.4?
@BadCandy:在News里边哦
@陈键梁:嗯,找到了,谢谢
GDScript还算是很方便易用的,但如果它是静态类型的就更好了!
最近由 nemo 修改于:2017-12-27 03:16:18说实话,实际开发过程中并不会用到太多的动态类型特性,况且GDScript也并没有完全实现duck typing。从它的实现角度来看也不是非动态类型不可。
然而动态类型的特性却使得编辑器很难进行代码提示,使用复杂一些的继承的话编辑器就完全“瞎”了...
当然这其实是编辑器的锅。虽然理论上并非完全无法做到对动态类型语言进行分析,但需要进行比较复杂的语义分析,至少目前的编辑器不具备这个能力。
结果就是对开发者来说很不方便。这在写小demo时还不明显,但代码量大起来就很恼人了。
我觉得如果采用类似Java那种引用类型也不错。
或者至少能够加上类型hint,就像这里讨论的 https://github.com/godotengine/godot/issues/10630 ,这样代码读起来和写起来会舒服很多...
@nemo:是的,动态的话注释就显得更为重要了,好在后来加入了C#,我觉得这让开发者有了更多的选择余地啦
@陈键梁:为什么我就爱不起来C#呢? 大概是因为跨平台支持不好...
实际上,我更加希望它把GDScript加上type hint
@nemo:我觉得它如果直接用typescript就好了 哈哈.
使用Godot全职开发一年多了,算是国内少有的人之一。Godot确实是一款简单易用的开源游戏引擎,其跨平台编辑器虽然有些小BUG但整体上还是非常方便的,3.0版本添加了许多新值得期待的Feature(C#支持、蓝图脚本、PBR渲染等)预计这个月会发布正式版。
GDScript实际用起来确实不怎么样,作为一门动态类型的脚本函数不是一等公民,所以没有闭包。不过原生支持面向对象,避免了像lua那样出现各种不同实现的方言。用过python的同学一般很快上手,没用过也能很快上手,因为这货其实不是python而更像C++,只是语法比较像python而已。另外一个问题是GDScript的性能比较低,我测试的结果中,纯GDScript的运行速度比lua慢4倍,切现在不支持jit,3.0对GDScript有一定性能优化但也就python3的水平。好在3.0以后提供了更多语言的选择,C#作为官方支持的语言,应该能解决一些问题;社区也在开发Python、nim、D等语言的绑定;而我个人还是非常希望有JS引擎的绑定,这样就能像 @大城小胖 所说的用TypeScript了,因为大家都迫切需要这样一门静态类型的脚本语言。
这引擎在国外有非常活跃的开源社区,所以有问题去github上提个issue一般很快修复,自己能解决的问题给他们提PR也很受欢迎,所以这个引擎的开源参与者越来越多,社区越来越活跃。
@Geequlim:感谢补充~
@Geequlim:有没有人提需求让官方支持TypeScript呢 ? 或者有没有民间高手在做 TypeScript 的支持呢?
@大城小胖:现阶段他们还是比较推崇GDScript,需要往后再看
这个引擎有没有一体化的服务端解决方案
@七步:你想要怎样的一体化
Godot2我用过,感觉不错,就是编译模版下载蛋疼。
最近由 fjzjk 修改于:2018-01-19 08:43:44现在试试3的c#支持和蓝图如何。其实这种小的引擎,更期待加强2d方面的支持,比如文中说缺少的切片和tiled这些
问题来了,国内有godot的讨论群么。我试了下不懂怎么用mono版的,是要去下mono sdk?
做2D游戏感觉比unity好用
3.02已经出来了!
很早就关注过 不过因为资料和活跃度问题 就没使用
gdscript的虚拟机是堆栈式的 性能和python一个水平 比lua js寄存器式的差不少……意味着不能用脚本写太复杂的逻辑
在中国,如果 Godot 算小众,Defold 就只能算无名了吧……
相比 Godot 的脚本,还是更倾向 Defold 的渲染效率,在大规模渲染节点的时候,Godot 容易踩坑