一、前言
第一個(gè)收集金幣的小游戲結(jié)束了,洋洋灑灑寫了三篇文章,分別介紹了相關(guān)節(jié)點(diǎn)、場(chǎng)景以及所有的代碼,作為新手能夠獨(dú)立使用 Godot 完成自己的第一個(gè)游戲也算是正式入門了!接下來(lái),我們開啟第二個(gè)完整的小游戲介紹:太空射擊小游戲!同樣很簡(jiǎn)單,但是有更多的發(fā)揮空間,當(dāng)然,我只介紹最簡(jiǎn)單的游戲?qū)崿F(xiàn),更多的關(guān)卡設(shè)計(jì)、游戲思路和游戲元素則留給大家去摸索開發(fā)吧。
我選擇這個(gè)游戲的靈感來(lái)自于我剛開始學(xué)習(xí) Unity 游戲開發(fā)時(shí),在官方視頻教程中看到的一個(gè)游戲: Space Shooter tutorial ,你會(huì)發(fā)現(xiàn)我在游戲里使用的素材都是來(lái)自這個(gè)游戲。除此之外,我推薦大家去下載另一個(gè)使用 Godot 引擎制作的太空射擊類小游戲: Space Rocks ,這個(gè)游戲的玩法截然不同,它的原理也更加值得新手去學(xué)習(xí),代碼中有許多的關(guān)于剛體模型物理碰撞的處理。
本節(jié)分為上下兩篇文章,源碼我已經(jīng)完整地上傳到 Github 倉(cāng)庫(kù),歡迎大家克隆并提交 issue ,在開始之前我得申明一下:
我使用的 Godot 版本依然是最新的預(yù)覽版: Godot 3.1 Alpha3
這已經(jīng)是本系列教程的第十一篇,所以會(huì)忽略部分細(xì)節(jié),有問(wèn)題請(qǐng)隨時(shí)留言
推薦加入國(guó)內(nèi) Godot 游戲開發(fā) QQ 交流群: 691534145 (本人非群主)
主要內(nèi)容:粒子系統(tǒng)的介紹(上篇)
閱讀時(shí)間: 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/
系列主頁(yè): http://liuqingwen.me/blog/introduction-of-godot-series/
二、正文
本篇目標(biāo)
介紹 Godot 中自帶的粒子系統(tǒng)
了解其他幾個(gè)常見節(jié)點(diǎn)的使用
本射擊游戲場(chǎng)景介紹和代碼(下篇)
粒子系統(tǒng)介紹
中大型游戲中,幾乎沒(méi)有哪個(gè)游戲不使用粒子特效的。掌握粒子系統(tǒng)對(duì)游戲開發(fā)極其重要,合理地使用粒子特效對(duì)游戲效果絕對(duì)是錦上添花、如虎添翼,常見的粒子特效有:煙花、灰塵、火焰、爆炸、光環(huán)、雪花、雨滴、濺射等等等等。比如下面的這張非常熟悉的效果圖,使用的就是粒子特效:
想要實(shí)現(xiàn)很酷的粒子特效是需要一定的學(xué)習(xí)和經(jīng)驗(yàn)積累的,這里推薦大家去油管( youtube )上訂閱一個(gè)名叫 Duc Vu 的泰國(guó)人的頻道,專做特效視頻教程,雖然他大部分教程里使用的是 Unity 粒子,但是思想理論和部分設(shè)置都是大體相同的,直達(dá)連接: https://www.youtube.com/channel/UC5ZauAWNyh931gRJUqB1QPw
在本射擊游戲中,我在四個(gè)地方使用了粒子特效,不過(guò)這都是一些非常簡(jiǎn)單的效果,設(shè)置起來(lái)也很輕松,簡(jiǎn)單的參數(shù)調(diào)整即可,接下來(lái)我們一起來(lái)討論下這些重要的參數(shù)吧! ?
粒子系統(tǒng)參數(shù)
粒子節(jié)點(diǎn) Particles2D 是 Godot 中所有節(jié)點(diǎn)里參數(shù)最多的一個(gè),這也是為什么同一個(gè)材質(zhì),打造出的粒子特效千變?nèi)f化的原因之一。如果想要實(shí)現(xiàn)自己心中的效果,我們需要多嘗試、多調(diào)試、多實(shí)踐,當(dāng)然,有幾個(gè)參數(shù)是對(duì)結(jié)果影響最直接的,請(qǐng)聽我一一道來(lái)。
首先是粒子節(jié)點(diǎn)中最基本的一些參數(shù),大部分參數(shù)看名字就知道其意義,如下表格:
參數(shù) 解釋 說(shuō)明
Emitting 是否發(fā)射粒子 如果 One Shot 勾選, Emitting 將會(huì)被取消勾選
Amount ?? 發(fā)射粒子的總數(shù)量 粒子消亡將重新產(chǎn)生新粒子,配合 Lifetime 生命周期參數(shù)
Lifetime ?? 粒子的生命周期 通過(guò)計(jì)算,每隔 Lifetime/Amount 的時(shí)間產(chǎn)生一顆新粒子
One Shot 只發(fā)射一次 非常適用于爆炸等特效,在代碼中控制發(fā)射
Preprocess 預(yù)熱,提前發(fā)射粒子 比如游戲中的下雪場(chǎng)景,也叫 Pre-warm
Speed Scale 速度縮放系數(shù) 整體效果,影響粒子材質(zhì)中的 Velocity 速度參數(shù)
Explosiveness 爆炸系數(shù) 粒子從中間往四周擴(kuò)散,爆炸特效必備
Randomness 隨機(jī)系數(shù) 粒子產(chǎn)生的隨機(jī)性,取值 1 為完全隨機(jī)
Local Coords ? 是否為本地坐標(biāo) 位于 Drawing 子菜單,粒子運(yùn)動(dòng)在本地坐標(biāo)還是世界坐標(biāo)
這些是 Particles2D 節(jié)點(diǎn)的主要參數(shù),控制粒子的一些整體效果,當(dāng)然,僅僅依靠這些參數(shù)是不行的,當(dāng)我們?cè)谑褂昧W庸?jié)點(diǎn)的時(shí)候,必須要給粒子節(jié)點(diǎn)添加一個(gè) Material 材質(zhì),否則你不會(huì)看到有任何效果發(fā)生,在 Process Material 菜單下,材質(zhì)分為兩種: ShaderMaterial 和 ParticlesMaterial 。
這里我們選擇給粒子節(jié)點(diǎn)創(chuàng)建一個(gè)新的 ParticlesMaterial 粒子材質(zhì),在粒子材質(zhì)中又有更豐富的參數(shù)配置,通過(guò)調(diào)節(jié)這些參數(shù)達(dá)到我們想要的效果,主要參數(shù)如下表:
參數(shù) 解釋 說(shuō)明
Emission Shape 發(fā)射體的形狀 有點(diǎn)、球體、方體、多點(diǎn)等形狀
Spread ? 粒子產(chǎn)生的范圍 最大值為 180 度乘以 2 倍,即全范圍發(fā)射: -180°~180°
Gravity 重力加速度 設(shè)置為 0 粒子將不受重力控制
Initial Velocity ? 粒子發(fā)射初始速度 與生命周期 Lifetime 參數(shù)結(jié)合產(chǎn)生特效
Angular Velocity 粒子的角速度 類似 Initial Velocity
Linear Accel 粒子的加速度 與 Initial Velocity 參數(shù)配合
Radial Accel 粒子旋轉(zhuǎn)加速度 與 Angular Velocity 參數(shù)配合
Damping 阻尼系數(shù) 類似遇到逆風(fēng)、摩擦阻力的效果
Angle 粒子角度 粒子的旋轉(zhuǎn)角度,非發(fā)射方向
Scale ? 粒子縮放尺寸 可以設(shè)置隨機(jī),隨時(shí)間變化而調(diào)整粒子的縮
Color ? 粒子的顏色 可以設(shè)置漸變顏色,粒子顏色隨時(shí)間而變化
粒子材質(zhì)的這些參數(shù)非常好理解,其中比較重要的參數(shù)我已經(jīng)標(biāo)記了,大家可以自己嘗試不同參數(shù)值對(duì)效果的影響。
一般來(lái)說(shuō),我們?cè)谑褂昧W酉到y(tǒng)制作理想效果的時(shí)候,還會(huì)經(jīng)常遇到隨機(jī)參數(shù)以及曲線設(shè)置。粒子系統(tǒng)中很多參數(shù)設(shè)置都有曲線功能,比如 Scale 縮放參數(shù),我們可以給它設(shè)置一個(gè) Scale Curve 曲線,在曲線上通過(guò)添加、刪除、移動(dòng)錨固點(diǎn)來(lái)調(diào)整曲線的樣式,最終粒子的大小縮放也就會(huì)隨時(shí)間順應(yīng)曲線而變化。
如果你熟悉 Unity 粒子,你會(huì)發(fā)現(xiàn) Unity 粒子的曲線功能調(diào)整更加方便,這里順便贊一下 Unity 2018.3 新版本的一些新功能、新特性、新改進(jìn),互相學(xué)習(xí)很重要嘛。 ?
除此之外,真正的特效一般都會(huì)使用到各種各樣的圖片作為粒子材質(zhì)紋理, Godot 中粒子節(jié)點(diǎn)還支持使用 SpriteSheet 精靈圖集、動(dòng)畫材質(zhì)、地圖材質(zhì)等,位于 Textures 紋理菜單下,本游戲并沒(méi)有使用到,大家可以去研究研究。
簡(jiǎn)單粒子效果
我在射擊游戲中實(shí)現(xiàn)的粒子特效都極其簡(jiǎn)單,也沒(méi)有使用任何其他的圖片作為粒子的材質(zhì)紋理:
注意這三個(gè)效果中的爆炸效果需要 Explosiveness 參數(shù)的配合,相信大家都能做出以上簡(jiǎn)單的粒子特效??傊?,對(duì)于粒子特效的應(yīng)用就是對(duì)粒子屬性的熟悉度,我給新手朋友們的建議是:盡量使用最少的參數(shù)配置出近視的效果,當(dāng)效果接近理想目標(biāo)后,再進(jìn)行其他參數(shù)的調(diào)整。還有提醒大家的是: Godot 中的 2D 粒子完全可以使用在 3D 游戲中!騷年們,充分發(fā)揮自己的創(chuàng)意,盡情打造酷炫的效果吧! ?
其他幾個(gè)節(jié)點(diǎn)
游戲中除了 Particles2D 節(jié)點(diǎn),我還使用了其他三個(gè)新的節(jié)點(diǎn): VisibilityNotifier2D/ParallaxBackground/TextureButton ,這里我也簡(jiǎn)單地說(shuō)明一下:
VisibilityNotifier2D 用于控制節(jié)點(diǎn)進(jìn)出視窗、屏幕通知,比如用于物體飛出屏幕就刪除等
TextureButton 一個(gè)按鈕控件,和普通按鈕不同的是,它可以設(shè)置按鈕在鼠標(biāo)的各種狀態(tài)下的圖片顯示
ParallaxBackground 節(jié)點(diǎn)配合 ParallaxLayer 實(shí)現(xiàn)滾動(dòng)特效,主要屬性參數(shù)為 Scroll 和 Scale 等
說(shuō)明:游戲中我就是使用 ParallaxBackground 節(jié)點(diǎn)實(shí)現(xiàn)的無(wú)限太空背景滾動(dòng)效果,它需要一個(gè)或者多個(gè)子節(jié)點(diǎn) ParallaxLayer 的配合,其原理就是通過(guò)各個(gè) ParallaxLayer 層不同的滾動(dòng)速度來(lái)實(shí)現(xiàn)背景遠(yuǎn)近的視覺(jué)效應(yīng),效果類似如下平臺(tái)游戲:
三、總結(jié)(上)
好了,上篇就介紹這些內(nèi)容吧,下篇主要內(nèi)容是代碼的重點(diǎn)解析??偨Y(jié)一下本篇主要知識(shí)點(diǎn):
Godot 中自帶粒子系統(tǒng)的相關(guān)參數(shù)說(shuō)明
游戲中應(yīng)用到的其他幾個(gè)有用的節(jié)點(diǎn)
本篇的 Demo 以及所有代碼已經(jīng)上傳到 Github ,地址: https://github.com/spkingr/Godot-Demos
未完待續(xù)……!