[程式] 從零學做3D格鬥遊戲要點的技能

看板GameDesign (遊戲設計)作者 (meowyih)時間1年前 (2023/02/22 00:53), 1年前編輯推噓14(1400)
留言14則, 14人參與, 1年前最新討論串1/1
https://youtu.be/7ELGkB7mhDY
上面有人問3D格鬥遊戲是不是個大坑, 讓我一時興起自己重拾 Blender 和 Godot 做了個小 Project, 並寫了這篇文章。 這篇文章是在講如果想要從零開始, 學會能做出影片中的 3D 格鬥遊戲的能力, 會用到的技能有哪些。 Skill 1: 能用Blender做3D模型並著色 也就是要做出下面影片中 00:00 秒到 00:20 秒的東西。 https://youtu.be/0H_WLqj0wlA
要學 Blender 的基本操作, 請把下面頻道的影片全部看完, 並且自己做一個甜甜圈, 做得出來就夠了。 https://www.youtube.com/watch?v=nIoXOplUvAw&list=PLjEaoINr3zgFX8ZsChQVQsuDSjEqdWMAD
Skill 2: 能用Blender產生並管理3D模型的動畫 也就是要做出下面影片中 00:21 秒到 00:50 秒的東西。 https://youtu.be/0H_WLqj0wlA?t=21
要學 Blender 的骨架設定和動畫操作, 請把下面的影片「15分鐘內學會做會動的蜘蛛」看完並照著做一次, 能理解這「15分鐘」(別當真XD) 的內容就夠了。 https://www.youtube.com/watch?v=imbIsNAvUpM
Skill 3: Mixamo (非必要,但我的模組和動作是這裡下載來的) https://www.mixamo.com/#/ 要做 3D 模組和產生動畫很花時間, 我是直接在 mixamo 下載來的, 直接點進去就知道這網站是幹嘛用的了。 但這不代表有了 mixamo 就不用學 Skill 1 和 Skill 2 了。 使用 mixamo 產生我這個遊戲使用的腳色外型和動作, 需要的步驟是: a. 下載一個腳色 b. reset scale c. clear all bones (rigs) and reset to T-pose d. upload to mixamo and do the auto-rigs e. download the auto-rig character and use Blender Mixamo add-on to add control rig. f. download all the action you need from mixamo (skin is not necessary) g. use Blender Mixamo add-on to injest all downloaded action into character. h. remove junk actions and lock (fake link) needed actions i. stash all needed actions into NLA j. export to glTF 這些網路上都找的到, 但你不會用 Blender 自己做模型和動畫的話, 基本上是做不出來的, 所以該學的還是得學學,不要偷懶。 Skill 4: 學習遊戲引擎的基本操作 我用的是目前還沒正式開放的 Godot 4.0 RC2, 但不管是用哪個引擎, 把官方範例的「My first 3D game」之類的文件照著寫一次就是了。 從範例中一定會學到的東西有: 1. 怎麼放一個光源 2. 怎麼放一個攝影機 3. 怎麼放一個 3D 物件 (要學會放我們從Blender匯出的模組) 4. 怎麼知道玩家按了一個鈕或一個鍵盤上的按鍵 從範例中可能學不到,要自己查的東西有: 5. 如何撥放物件的動畫,也就是學會做出下面影片 00:00 秒 - 00:13 秒的遊戲(?) https://youtu.be/ayISrLB96P8
撥放的工具,在 Godot 叫 AnimationPlayer,在 Unity 叫 Animator。 其中,(4) 和 (5) 會需要寫幾行到十幾行左右的程式。 Skill 5: 學習 AnimationTree (Godot) 或 BlendTree (Unity) 上面的影片中,你可以看出來每個動作是完全分離的, 從待機到跑步、從跑步到攻擊、從攻擊到受擊, 動作間就像跳格或瞬移了一樣完全沒有真實感。 為了修正這問題並將每個動作接起來, 就有了 AnimationTree/BlendTree 這些工具, 以 Godot AnimationTree 來說,設定與效果像這樣: https://youtu.be/ayISrLB96P8?t=17
(00:17 秒到 00:39 秒) 此外, AnimationTree 除了把二個動作接起來外, 在影片中還有用到把動作加減速、讓動作從中間開始接等等的功能, 這是因為預設的物件動畫效果不好時 (出拳速度太慢、受擊前0.3秒會發呆等等) 就需要用各種工具調整它。 這也是 3D 格鬥遊戲中非學不可的東西。 Skill 6: HitBox 與 HurtBox 格鬥遊戲中,每個人物都會有三個「範圍」的設定。 1. HurtBox - 被敵人打到會受傷的部位 2. HitBox - 打到敵人會讓它受傷的部位 3. Object Area - 就算互相不攻擊,人物本體的體積大小。 我的簡陋遊戲中,完全沒做 3, 其結果就是一直往前走就會穿透敵人,跟幽靈一樣, 這點請原諒,因為重要的是 HitBox 和 HurtBox。 下面影片中,紅色是 HurtBox,綠色是 HitBox。 https://youtu.be/ayISrLB96P8?t=48
(00:48 秒開始) 正常的遊戲裡,HitBox 要在攻擊時才出來, 但我為了將程式碼減到最少 (<100行),所以 HitBox 一直存在, 其結果就是影片最後拳頭太靠近敵人也算打擊到的 Bug。 處理 HitBox/HurtBox 的碰撞偵測「物件」,一定會有二個屬性。 在 Godot 中一個叫 Layer, 代表該物件是存在在哪個類別裡。 一個叫 Mask, 代表該物件要偵測並告知哪個類別的碰撞事件。 舉例來說, 自己的綠色拳頭 (HitBox), 打到自己的紅色區域 (HurtBox), 二者都不用也不該收到碰撞訊號。 而自己的綠色拳頭 (HitBox)、 打到敵人的紅色區域 (HurtBox), 敵人的紅色區域需要收到碰撞訊號, 但自己的綠色拳頭則不用。(沒有拳頭會受傷之類的設計) 整理起來,如果 Layer 設定是這樣 Player HitBox: Layer 1 Player HurtBox: Layer 2 Enemy HitBox: Layer 3 Enemy HurtBox: Layer 4 則: Player HitBox Mask: none 玩家腳色不用處理拳頭被東西碰到的訊號 Player HurtBox Mask: 3 如果位於 Layer 3 的敵人拳頭碰到Player HurtBox, 請送訊號給 Player Enemy HitBox Mask: none 敵方腳色不用處理拳頭被東西碰到的訊號 Enemy HurtBox Mask: 1 如果位於 Layer 1 的玩家拳頭碰到Enemy HurtBox, 請送訊號給 Enemy 總之整個 HitBox/HurtBox 與碰撞偵測都是在處理和設定這中間的關係, 基本上沒甚麼難度,只是要想清楚而已。 【總結】 Skill 1+2 要學完,大概少說也要個二三十個小時。 Skill 4 如果有程式背景,用引擎學會寫 My First 3D Game 大概五到十個小時吧? Skill 5 基本的 Blend 功能不會花甚麼時間。 Skill 6 邏輯不難,但寫程式要看天分。 所以從零開始,一個月內就夠了。 如果要下載我寫的這個 Godot 4.0 RC project,我放在這: https://github.com/meowyih/TestModel -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.228.94.165 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1676998435.A.E7A.html

02/22 01:31, 1年前 , 1F
好謝謝大大分享
02/22 01:31, 1F

02/22 02:57, 1年前 , 2F
好評 100分
02/22 02:57, 2F

02/22 09:06, 1年前 , 3F
感謝
02/22 09:06, 3F

02/22 09:07, 1年前 , 4F
感謝分享!!
02/22 09:07, 4F

02/22 10:00, 1年前 , 5F
讚喔!
02/22 10:00, 5F

02/22 11:36, 1年前 , 6F
讚der
02/22 11:36, 6F

02/22 13:35, 1年前 , 7F
感謝分享~ <3
02/22 13:35, 7F

02/22 17:49, 1年前 , 8F
02/22 17:49, 8F

02/22 20:52, 1年前 , 9F
02/22 20:52, 9F

02/23 10:26, 1年前 , 10F
好猛,推
02/23 10:26, 10F
一點都不猛, 從頭到尾根本沒寫多少程式, 猛的是現在的遊戲引擎, 甚麼都幫你弄好了 T_T ※ 編輯: meowyih (36.228.201.247 臺灣), 02/23/2023 11:59:16

02/23 12:37, 1年前 , 11F
推教學!Blender真的很讚
02/23 12:37, 11F

02/23 16:14, 1年前 , 12F
哦哦我來筆記!感謝
02/23 16:14, 12F

02/24 19:13, 1年前 , 13F
實用
02/24 19:13, 13F

03/08 13:30, 1年前 , 14F
推分享
03/08 13:30, 14F
文章代碼(AID): #1ZzFSZvw (GameDesign)
文章代碼(AID): #1ZzFSZvw (GameDesign)