Godot3游戏引擎入门之十一:Godot中的粒子系统与射击游戏(上)

godot_cover.jpg

一、前言

第一个收集金币的小游戏结束了,洋洋洒洒写了三篇文章,分别介绍了相关节点、场景以及所有的代码,作为新手能够独立使用 Godot 完成自己的第一个游戏也算是正式入门了!接下来,我们开启第二个完整的小游戏介绍:太空射击小游戏!同样很简单,但是有更多的发挥空间,当然,我只介绍最简单的游戏实现,更多的关卡设计、游戏思路和游戏元素则留给大家去摸索开发吧。

太空射击游戏效果图

我选择这个游戏的灵感来自于我刚开始学习 Unity 游戏开发时,在官方视频教程中看到的一个游戏: Space Shooter tutorial ,你会发现我在游戏里使用的素材都是来自这个游戏。除此之外,我推荐大家去下载另一个使用 Godot 引擎制作的太空射击类小游戏: Space Rocks ,这个游戏的玩法截然不同,它的原理也更加值得新手去学习,代码中有许多的关于刚体模型物理碰撞的处理

本节分为上下两篇文章,源码我已经完整地上传到 Github 仓库,欢迎大家克隆并提交 issue ,在开始之前我得申明一下:

  1. 我使用的 Godot 版本依然是最新的预览版: Godot 3.1 Alpha3
  2. 这已经是本系列教程的第十一篇,所以会忽略部分细节,有问题请随时留言
  3. 推荐加入国内 Godot 游戏开发 QQ 交流群: 691534145本人非群主

主要内容:粒子系统的介绍(上篇)
阅读时间: 9 分钟
永久链接: http://liuqingwen.me/blog/2018/12/23/introduction-of-godot-3-part-11-introduce-the-particles-system-and-make-a-shooter-game-part-1/
系列主页: http://liuqingwen.me/blog/introduction-of-godot-series/

二、正文

本篇目标

  1. 介绍 Godot 中自带的粒子系统
  2. 了解其他几个常见节点的使用
  3. 本射击游戏场景介绍和代码(下篇)

粒子系统介绍

中大型游戏中,几乎没有哪个游戏不使用粒子特效的。掌握粒子系统对游戏开发极其重要,合理地使用粒子特效对游戏效果绝对是锦上添花、如虎添翼,常见的粒子特效有:烟花、灰尘、火焰、爆炸、光环、雪花、雨滴、溅射等等等等。比如下面的这张非常熟悉的效果图,使用的就是粒子特效:

游戏中粒子效果

想要实现很酷的粒子特效是需要一定的学习和经验积累的,这里推荐大家去油管( youtube )上订阅一个名叫 Duc Vu 的泰国人的频道,专做特效视频教程,虽然他大部分教程里使用的是 Unity 粒子,但是思想理论和部分设置都是大体相同的,直达连接: https://www.youtube.com/channel/UC5ZauAWNyh931gRJUqB1QPw

game_fx_by_DucVu.jpg

在本射击游戏中,我在四个地方使用了粒子特效,不过这都是一些非常简单的效果,设置起来也很轻松,简单的参数调整即可,接下来我们一起来讨论下这些重要的参数吧! :smiley:

粒子系统参数

粒子节点 Particles2D 是 Godot 中所有节点里参数最多的一个,这也是为什么同一个材质,打造出的粒子特效千变万化的原因之一。如果想要实现自己心中的效果,我们需要多尝试、多调试、多实践,当然,有几个参数是对结果影响最直接的,请听我一一道来。

首先是粒子节点中最基本的一些参数,大部分参数看名字就知道其意义,如下表格:

参数 解释 说明
Emitting 是否发射粒子 如果 One Shot 勾选, Emitting 将会被取消勾选
Amount ⭐⭐ 发射粒子的总数量 粒子消亡将重新产生新粒子,配合 Lifetime 生命周期参数
Lifetime ⭐⭐ 粒子的生命周期 通过计算,每隔 Lifetime/Amount 的时间产生一颗新粒子
One Shot 只发射一次 非常适用于爆炸等特效,在代码中控制发射
Preprocess 预热,提前发射粒子 比如游戏中的下雪场景,也叫 Pre-warm
Speed Scale 速度缩放系数 整体效果,影响粒子材质中的 Velocity 速度参数
Explosiveness 爆炸系数 粒子从中间往四周扩散,爆炸特效必备
Randomness 随机系数 粒子产生的随机性,取值 1 为完全随机
Local Coords ⭐ 是否为本地坐标 位于 Drawing 子菜单,粒子运动在本地坐标还是世界坐标

这些是 Particles2D 节点的主要参数,控制粒子的一些整体效果,当然,仅仅依靠这些参数是不行的,当我们在使用粒子节点的时候,必须要给粒子节点添加一个 Material 材质,否则你不会看到有任何效果发生,在 Process Material 菜单下,材质分为两种: ShaderMaterialParticlesMaterial

godot_11_particles2d_node.png

这里我们选择给粒子节点创建一个新的 ParticlesMaterial 粒子材质,在粒子材质中又有更丰富的参数配置,通过调节这些参数达到我们想要的效果,主要参数如下表:

参数 解释 说明
Emission Shape 发射体的形状 有点、球体、方体、多点等形状
Spread ⭐ 粒子产生的范围 最大值为 180 度乘以 2 倍,即全范围发射: -180°~180°
Gravity 重力加速度 设置为 0 粒子将不受重力控制
Initial Velocity ⭐ 粒子发射初始速度 与生命周期 Lifetime 参数结合产生特效
Angular Velocity 粒子的角速度 类似 Initial Velocity
Linear Accel 粒子的加速度 与 Initial Velocity 参数配合
Radial Accel 粒子旋转加速度 与 Angular Velocity 参数配合
Damping 阻尼系数 类似遇到逆风、摩擦阻力的效果
Angle 粒子角度 粒子的旋转角度,非发射方向
Scale ⭐ 粒子缩放尺寸 可以设置随机,随时间变化而调整粒子的缩
Color ⭐ 粒子的颜色 可以设置渐变颜色,粒子颜色随时间而变化

粒子材质的这些参数非常好理解,其中比较重要的参数我已经标记了,大家可以自己尝试不同参数值对效果的影响。

godot_11_particles_material.png

一般来说,我们在使用粒子系统制作理想效果的时候,还会经常遇到随机参数以及曲线设置。粒子系统中很多参数设置都有曲线功能,比如 Scale 缩放参数,我们可以给它设置一个 Scale Curve 曲线,在曲线上通过添加、删除、移动锚固点来调整曲线的样式,最终粒子的大小缩放也就会随时间顺应曲线而变化。

如果你熟悉 Unity 粒子,你会发现 Unity 粒子的曲线功能调整更加方便,这里顺便赞一下 Unity 2018.3 新版本的一些新功能、新特性、新改进,互相学习很重要嘛。 :grin:

除此之外,真正的特效一般都会使用到各种各样的图片作为粒子材质纹理, Godot 中粒子节点还支持使用 SpriteSheet 精灵图集、动画材质、地图材质等,位于 Textures 纹理菜单下,本游戏并没有使用到,大家可以去研究研究。

简单粒子效果

我在射击游戏中实现的粒子特效都极其简单,也没有使用任何其他的图片作为粒子的材质纹理:

粒子效果一览

注意这三个效果中的爆炸效果需要 Explosiveness 参数的配合,相信大家都能做出以上简单的粒子特效。总之,对于粒子特效的应用就是对粒子属性的熟悉度,我给新手朋友们的建议是:尽量使用最少的参数配置出近视的效果,当效果接近理想目标后,再进行其他参数的调整。还有提醒大家的是: Godot 中的 2D 粒子完全可以使用在 3D 游戏中!骚年们,充分发挥自己的创意,尽情打造酷炫的效果吧! :sunglasses:

其他几个节点

游戏中除了 Particles2D 节点,我还使用了其他三个新的节点: VisibilityNotifier2D/ParallaxBackground/TextureButton ,这里我也简单地说明一下:

  • VisibilityNotifier2D 用于控制节点进出视窗、屏幕通知,比如用于物体飞出屏幕就删除等
  • TextureButton 一个按钮控件,和普通按钮不同的是,它可以设置按钮在鼠标的各种状态下的图片显示
  • ParallaxBackground 节点配合 ParallaxLayer 实现滚动特效,主要属性参数为 Scroll 和 Scale 等

说明:游戏中我就是使用 ParallaxBackground 节点实现的无限太空背景滚动效果,它需要一个或者多个子节点 ParallaxLayer 的配合,其原理就是通过各个 ParallaxLayer 层不同的滚动速度来实现背景远近的视觉效应,效果类似如下平台游戏:

滚动背景效果

三、总结(上)

好了,上篇就介绍这些内容吧,下篇主要内容是代码的重点解析。总结一下本篇主要知识点:

  1. Godot 中自带粒子系统的相关参数说明
  2. 游戏中应用到的其他几个有用的节点

本篇的 Demo 以及所有代码已经上传到 Github ,地址: https://github.com/spkingr/Godot-Demos

未完待续……!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容