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