前言:由于工作需要,我要找一款2D的开源游戏引擎。以下是我选取调研的四款软件。
一、Godot
二、Panda3D
三、Cocos2dx
四、CocosCreator
(注:这些软件中的3d部分功能均不在考察范围中)
调研内容:
1.使用语言
2.可执行文件可以运行的平台
3.对象的封装、继承、实例化等功能
4.多场景的切换
5.物理引擎,包含:
碰撞检测
物理模型:
实体
绳子
引力效果
6.粒子效果
7. UI组件,包含:
8.利用容器设置对象在屏幕中的位置
9.光影渲染
10.动画部分,包含:
11.音频文件的加载、播放
12.视频文件的加载、播放
13.学习资源的丰富性
14.引擎效率
0.基本介绍
官网:https://godotengine.org/
中文官网:http://docs.godotengine.org/zh_CN/
1.语言和代码
引擎使用的语言:官方为GDscript语言(一个专用于Godot的语言),也支持C#语言。
GDscript语言特点:类似于Python。
编辑代码的方式:
①在编辑器中直接编写并编译。
②通过外部工具进行编写
语言的使用(使用引擎内置编辑器):
C#:在引擎中编写时,就如同编辑txt,感受不好;部分功能目前不支持。
GDscript:能实时检查错误;有智能拼写功能。
生成可执行程序:
编辑器自带导出程序功能
支持平台:Android、IOS、HTML5(按网上资料,HTML几乎用不了)、Mac OSX、Windows、Linux
2.对象的编辑和设计
由于Godot自带图形化编辑器,对象和程序的设计较为容易
①对象的定义和封装
在编辑器中,可以自由创建场景节点树,任意节点都可以作为场景文件储存,即完成了对象的封装
②对象的实例化
图形化方式:右击节点,选择“实例化子场景”,即可添加(实例化)某个场景
代码方式:对于已经保存好的场景(假设名为object.tscn),在代码中输入:
可以创建实例并添加到场景中
③对象的继承
选择“新建继承的场景”可以进行场景的继承并编辑(除了原有的节点关系,其余都可以修改)
3.场景的切换
Self.get_tree().change_scene()方法
4.物理引擎
①碰撞监测
Godot有CollisionShape2D节点,可以绘制一个碰撞区域。若不同对象的碰撞区域发生重叠,则会发出信号(Godot中有一类信号发射器功能,用于实现函数回调。使用很简单,对新手较友好)
②物理模型
实体方块:
RigidBody节点可以提供物理实体模型所需的属性,包括:重量、所受的力、摩擦系数、弹性系数、旋转角等参数
绳子:
需要用多个实体方块连接而成
③引力效果
需要通过代码实现
5.粒子效果
使用Particle节点,可设置的参数如下:
①单个粒子的属性:粒子的材料(颜色)、大小、速度、方向、加速度、旋转等
②粒子的生成:粒子数量、粒子存在时间、产生粒子的频率(爆炸性or持续性)、生成粒子的位置(一个点or一片区域)、粒子的随机性等
可生成的效果:火焰、漩涡、满天星、爆炸等
6.UI组件
Button:有
Label:有
ProgressBar:有,可添加三层图案(顶层、底层、填充层)
定时器:有。定时器控件在到达指定时间后,会发出信号
字体、字号设置:系统只有默认字体、其余字体需手动添加(放入文件夹中并在控件上设置)
(常用功能可以直接从节点中找到并添加)
7.容器
①对象位置的设置:
可以设置对象在屏幕中的绝对位置(x,y),也可以设置对象相对于父节点的位置(margin)
②容器的种类
网格状排列:GridContainer
横向排列:HBoxContainer
纵向排列:VBoxContainer
九宫格容器:NinePatchContainer,用于保证容器的四个角不随图片大小变化而变化
9光影效果
使用light2D(在指定区域叠加一层半透明图像)和LightOccluder2D(提供阴影效果,它所属的对象的形状会阻挡光线的穿过)
10动画部分
①图形化实现
Godot自带动画编辑器。选定对象后,可以在不同帧设置其位置等参数。播放时,该对象将按照这些帧进行平滑运动
②代码实现
使用interpolate_property()函数,可以让对象的属性的值(包括位置、颜色或自定义变量)在指定时间内从一个数平滑过渡到另一个数
③骨骼效果(不同动画对象的连接)在编辑器中可以选择并添加该内容
11.音频文件的加载、播放
使用AudioStreamPlayer
支持格式:ogg、oggstr、res、sample、tres、wav
12.视频文件的加载、播放
使用VideoPlayer播放视频
支持格式:ogv、res、tres、webm
13.资源的丰富性
官方api有中英两个版本(部分英文无中文翻译,但影响不大)
评价:godot的特点是“小而全”,需要的功能基本都能快速找到,节点种类丰富,也很容易上手,在入门初学时,基本不需要代码就能实现简单游戏。
但是,部分功能不够强大(或者说不够好用)。比如在代码编辑上,引擎自带的编辑器虽然有智能拼写等功能,但实际使用感受一般般,且部分报错信息难以读懂。可以使用外部编辑器(如vscode)替代