最近GDQuest的3D課程放出來(lái)一些。
之前練習(xí)的遊戲都是2D,換個(gè)口味試試3D。
這邊稍微講一下GDQuest的課程。
優(yōu)點(diǎn)講得很詳細(xì),還有各種名詞解釋。我自己覺(jué)得蠻值得的。
只是目前課程都還在early access階段。
內(nèi)容不少了,只是照預(yù)定的計(jì)畫(huà)表,2D進(jìn)度大概做了一半,3D進(jìn)度大概1/4。
接下來(lái)七月底會(huì)釋出Node Essentials的early access課程。
缺點(diǎn)或者說(shuō)是門(mén)檻,課程是全英文的。
不過(guò)因?yàn)樗且晕淖纸虒W(xué)為主要方式,所以可以用網(wǎng)頁(yè)翻譯。
比較不懂的地方,再用原文丟到ChatGPT問(wèn)一下。
最後就是課程價(jià)錢(qián),我記得是可以到群組跟他們要各地區(qū)的折價(jià)代碼,會(huì)再便宜一些。
之前有了解最基本的3D操作。
跟2D比起來(lái)讓我比較困擾的是視角移動(dòng),變成三維空間。
移動(dòng)?xùn)|西前需要先用滑鼠移動(dòng)視角,但又不像手把玩遊戲可以很簡(jiǎn)單的喬角度。
所以這是我剛開(kāi)始比較彆扭的部分,只能透過(guò)一些快捷鍵增加操作效率。
首先按F可以直接對(duì)準(zhǔn)東西正中間。
想要小移動(dòng)節(jié)點(diǎn)可以按著shift,讓移動(dòng)幅度不要那麼大。
調(diào)整視角可以按左鍵或滑鼠滾輪,兩種效果不太一樣。
課程正式開(kāi)始跟2D一樣是先從建立腳色開(kāi)始熟悉。
腳色站立的平臺(tái)製作用到CSGBox3D,我第一次用到的node。
腳色本身沒(méi)有意外是用CharacterBody3D。
Z軸向前是負(fù)、X軸向右是正、Y軸向上是正。
可以使用右手來(lái)視覺(jué)化。
如果將拇指指向 X 軸正方向,食指指向 Y 軸正方向,則中指將指向 Z 軸正方向。
所以Z軸正方向是往我們螢?zāi)环较颍斑h(yuǎn)離螢?zāi)痪褪秦?fù)方向。
移動(dòng)一樣用到Input.get_vector(),先得到2D向量。
var input_vector := Input.get_vector("move_left", "move_right", "move_up", "move_down")
var direction := Vector3(input_vector.x, 0.0, input_vector.y)
這樣就可以把2D的輸入,轉(zhuǎn)換到3D的XZ方向。
剩下跟2D移動(dòng)差不多感覺(jué)。
接下來(lái)是我沒(méi)碰過(guò),花了一些時(shí)間去理解。
目標(biāo)是讓角色會(huì)朝向滑鼠的方向,以及腳是朝著移動(dòng)輸入的方向。
對(duì)我來(lái)說(shuō)有點(diǎn)難的地方是2D轉(zhuǎn)成3D座標(biāo)的過(guò)程。
首先建了一個(gè)Plane(Vector3.UP),一個(gè)無(wú)限延伸的平面放在角色腳下。
var mouse_position_2d := get_viewport().get_mouse_position()
得到遊戲視窗中滑鼠的2D位置。
var mouse_ray := _camera_3d.project_ray_normal(mouse_position_2d)
這是我不太確定的部分,我的理解是他會(huì)從這個(gè)2D座標(biāo)和攝影機(jī)位置得出一條射線。
var world_mouse_position: Variant = _world_plane.intersects_ray(_camera_3d.global_position, mouse_ray)
最後用攝影機(jī)的3D座標(biāo)射出射線,得到跟平面的交點(diǎn)。
然後讓角色看向交點(diǎn),就可以達(dá)到看著滑鼠的功能。
另外腳的方向就是透過(guò)Z軸前進(jìn)方向和移動(dòng)方向的夾角減掉角色現(xiàn)在的角度,得到腳要旋轉(zhuǎn)多少。
本節(jié)課程最後部分是火球的發(fā)射。
分成兩部分,一個(gè)是生成火球發(fā)射,另一個(gè)是火球打到敵人時(shí)的處理方式。
前者生成火球跟2D的時(shí)候差不多,只是換成3D版本。不過(guò)中間還是有學(xué)到一些東西。
後者就是hitbox、hurtbox的應(yīng)用。
之前這個(gè)我都是用這個(gè)影片學(xué)來(lái)的方式。
一樣都是用Area。
hitbox只設(shè)定layer,hurtbox設(shè)定mask。只有其中一方負(fù)責(zé)偵測(cè)攻擊。
GDQuest教的分得再細(xì)一點(diǎn),花了我一些時(shí)間才搞清楚。
新的方法兩邊都有設(shè)定layer和mask。
hitbox會(huì)在偵測(cè)到hurtbox進(jìn)來(lái)的時(shí)候,發(fā)出打到東西的訊號(hào)。
另一邊則相反會(huì)再被打到的時(shí)候,發(fā)出訊號(hào)。
這樣可以把攻擊的效果和被打到的反應(yīng)分開(kāi),後續(xù)處理上我感覺(jué)應(yīng)該會(huì)再方便一點(diǎn)。
另外課程有時(shí)會(huì)用到set,lambda function,也是我平常不會(huì)用到的東西。
還有@export的延伸用法,@export_flags()、@export_range()。
嚐鮮完3D再來(lái)就要回去繼續(xù)玩2D了。
先專(zhuān)注一個(gè)方向。
題外話我最近腦波一弱買(mǎi)了ipad air 和 apple pencil。
目前還在熟悉操作。有什麼推薦好用的App嗎?
我是打算拿來(lái)當(dāng)mac的第二螢?zāi)缓洼o助工具。