iT邦幫忙

2026 iThome 鐵人賽

DAY 29
0
Software Development

Unity進階——做一個完整的遊戲系列 第 29 篇

Day 29:遺跡路線整理、Boss 戰後回報、音樂與音效系統

  • 分享至 

  • xImage
  •  

Day28 做完 Boss 主動攻擊後,整個 Boss 戰已經能夠進行。玩家可以進入洞穴、觸發 Boss 對話、打核心、閃避攻擊,最後擊敗 Boss。所以 Day29 的重點不再是繼續增加 Boss 招式,而是開始整理整條主線流程的前後銜接。

這一天做的事情比較雜,但其實都很重要。前面幾天大多是在做「能不能玩」,Day29 則是在補「玩起來像不像一個完整流程」。包括回遺跡的路線、遺跡路標、任務階段封鎖、Boss 戰後回村長家回報,還有背景音樂與戰鬥音效。
這些內容單看都不是巨大功能,但少了它們,遊戲會變得很奇怪。玩家打完 Boss 卻不能自然回報,NPC 還在講前期任務,遺跡出口方向不清楚,戰鬥沒有聲音回饋。

一、補上洞穴道路回遺跡的轉場

https://ithelp.ithome.com.tw/upload/images/20260927/20178373zYRzs37rFS.png

Day29 一開始先整理 ToCaveScene 回到遺跡的流程。
我在 ToCaveScene 中建立了一個空物件:toruins
這個物件是從通往洞穴道路回到遺跡時的落點。也就是說,玩家從洞穴道路往回走時,不會直接被丟到奇怪的位置,而是回到遺跡中對應的出生點。
接著,遺跡場景裡也補上通往洞穴道路的 Trigger:tocaveroad

https://ithelp.ithome.com.tw/upload/images/20260927/20178373j2EBRlLMHW.png

玩家踩到 tocaveroad 後,會被傳送到 ToCaveScene,並落在 toruins。這樣遺跡和洞穴道路之間就形成雙向連接,不再只是單方面從遺跡往外走。
這裡還額外整理了兩個回遺跡的落點:
villagetoruins
caveroadtoruins

https://ithelp.ithome.com.tw/upload/images/20260927/201783730E4J9FgzzB.png

villagetoruins 對應從村莊回到遺跡。
caveroadtoruins 對應從洞穴道路回到遺跡。
這樣玩家從不同方向回到遺跡時,會出現在不同位置,場景方向感比較合理。否則玩家明明是從洞穴道路回來,結果出生在村莊方向,那就像捷運出口隨機抽卡。很刺激,但沒必要。
這次也修改了 SceneTransitionPoint.cs,讓轉場點不只是單純切場景,還能根據 Boss 是否已擊敗來限制使用,並在抵達新場景後關閉指定物件。例如 Boss 戰後回到 ToCaveScene 時,可以自動移除某個擋路物件。

二、補回遺跡開場史萊姆事件
Day29 也回頭整理了 TutorialScene,也就是教學遺跡場景。
遺跡原本是遊戲最早的區域,劇情上主角在這裡祭拜先祖,接著遇到第一隻異常小怪。這段流程很重要,因為它是整個主線異變的開始。
這次在遺跡中放了三個關鍵物件:
tocaveroad
monster
dialog
其中 monster 是遺跡史萊姆,dialog 是觸發看見史萊姆前內心獨白的物件。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373QtVqxqBqDg.png

我沒有用「玩家看見史萊姆」這種抽象條件判斷,而是直接放一個 dialog Trigger。玩家踩到它,就代表主角注意到前方異常,然後播放內心獨白。這樣判斷最穩,不用跟 Unity 討論「視線」這種聽起來很哲學、寫起來很麻煩的東西。
遺跡史萊姆設定為:
名稱:遺跡史萊姆
血量:150
經驗:5
金幣:2 到 4
傷害:4
死亡後不刷新

https://ithelp.ithome.com.tw/upload/images/20260927/20178373faiWBBkuSZ.png

這隻史萊姆不是要當強敵,而是開場教學怪。它的數值只有森林怪物的一半左右,主要用來讓玩家理解:遺跡附近出現小怪,這不是正常現象。
玩家踩到 dialog 後,會出現看見史萊姆前的主角內心獨白。

https://ithelp.ithome.com.tw/upload/images/20260927/201783736xOLwFqnSI.png

例如:
「嗯?那是什麼聲音?」
「遺跡附近怎麼會有這種東西?」
「看來不是普通野獸。正好,別擋我回村的路。」
擊敗史萊姆後,會再出現一段擊敗後獨白。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373ERyRdngwAx.png

例如:
「這種怪物以前從沒出現在遺跡附近。」
「先祖的地方出了怪物……這可不是小事。」
「得先回村告訴村長。」
這樣遊戲開場就完整了。玩家不是莫名其妙被叫去找村長,而是先在遺跡遇到異常,打倒小怪後意識到問題嚴重,才回村長家報告。
中間也遇到一個很 Unity 的問題:史萊姆一開始只有血條和碰撞箱,模型本體看不到。
後來確認問題不是史萊姆素材沒載入,而是遺跡場景本身的 Sorting Layer 很複雜。這個場景用了 Layer 1 / Layer 2 / Layer 3 的 Tilemap 排序層,史萊姆原本在 Default,所以 Sprite 被上層 Tilemap 蓋住。修正方式是讓 monster/Visual 使用 Layer 3,Sorting Order 設成 50。這樣史萊姆才正常顯示。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373PZfjwJnaBi.png

這件事很值得記。血條看得到,本體看不到,不一定是素材壞掉,也可能只是被地圖蓋住。

三、加入遺跡方向標識
遺跡現在不只是教學場景,也變成主線中的交通樞紐。玩家會從遺跡前往村莊、森林,也會從遺跡前往洞穴道路。
所以 Day29 開始補方向標識。
這次先做村莊方向。
場景裡原本有:
Direction_ToVillage
Codex 沿用這個物件,補上可見路牌 Sprite,並讓 Play Mode 顯示:
↓ 村莊

https://ithelp.ithome.com.tw/upload/images/20260927/20178373JXOaTHdDpJ.png

這樣玩家在遺跡裡就能清楚知道哪個方向是村莊。
Day29 先只做村莊方向,主要是先測試這套標識方式是否可行。成功後,後續可以用同樣方法補森林方向和洞穴方向。

四、用 special box 控制森林與洞穴道路開放時機
遺跡雖然是交通樞紐,但不是所有路一開始都應該開放。
如果玩家一開始就能跑去森林或洞穴道路,主線順序會被打亂。玩家可能還沒問村長、還沒去酒館、還沒拿雷痕符文,就一路亂跑到後期區域。
所以 Day29 使用兩個碰撞箱控制路線:
special box1
special box2

https://ithelp.ithome.com.tw/upload/images/20260927/20178373qRgQ5u47Wc.png

special box1 擋住通往森林的路。
只有當任務進度到 ForestInvestigation,也就是接到「前往森林,調查五色寶光」之後,special box1 才會消失。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373uWq0T7VwE9.png

special box2 擋住通往洞穴道路的路。
只有當任務進度到 PrepareForCave,也就是接到「前往洞穴,準備挑戰最終 Boss」之後,special box2 才會消失。
這樣路線開放就和主線進度綁定。玩家接到森林任務,森林路才打開;玩家取得雷痕符文並完成武器匠確認後,洞穴道路才打開。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373ShOYgv17cm.png

這張可以測試接到森林任務後,special box1 消失,森林方向變成可通行。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373fYKqLhY21O.png

這張可以測試接到洞穴任務後,special box2 消失,洞穴道路方向變成可通行。
這中間也發生一個很驚悚的小插曲:special box1 和 special box2 一度不見。
後來確認,這很可能是因為物件在 Unity 裡放好了,但還沒存場景,結果 Codex 直接修改場景檔,Unity 重新讀檔後,未存的物件就被沖掉。最後重新放回並存檔,確認 special box1 位於 (-9.75, 5.44, 0),大小 0.5 x 3;special box2 位於 (13.06, 4.86, 0),大小也是 0.5 x 3。
這件事提醒我:只要有手動放場景物件,改場景檔前一定要先存檔。

五、Boss 戰後回村長家回報
Boss 戰打完後,主線不能直接停在洞穴裡。玩家需要回到村莊,向村長報告 Boss 已經被擊敗。
Day29 在 NpcDialogueInteraction.cs 裡補上了 Boss 戰後村長回報。
當任務階段是 BossDefeated 時,玩家靠近村長,會看到提示:
按 E 向村長回報 Boss 已被擊敗

https://ithelp.ithome.com.tw/upload/images/20260927/20178373byDpWpsHAb.png

接著會觸發 Boss 戰後對話。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373mIeEPzpwwL.png

這段對話的用途是收尾。玩家不是只在洞穴裡打完 Boss 就結束,而是回到村子,把結果告訴村長,讓整條主線回到村莊這個起點。
對話完成後,任務階段會推進到:
BossReported

https://ithelp.ithome.com.tw/upload/images/20260927/20178373e8hhgbqgBR.png

這裡非常重要。Boss 已經被擊敗後,村長不能再講「前往酒館詢問受傷年輕人」或「前往森林調查」這種舊流程台詞。Codex 也特別處理了這點,讓 BossDefeated 和 BossReported 之後不會掉回前期任務。
武器匠也補了 Boss 戰後閒談,避免 Boss 已死後又觸發「確認雷痕符文」的舊對話。

六、加入背景音樂與音效
Day29 的另一個重點是音樂與音效。
原本遊戲大多靠畫面和文字提示。玩家攻擊命中、受傷、敵人死亡,都沒有明確聲音回饋。場景之間也缺少氛圍差異。
這次加入四種背景音樂:
村莊音樂
遺跡音樂
洞穴道路音樂
戰鬥音樂

https://ithelp.ithome.com.tw/upload/images/20260927/20178373inxkbwwmvo.png

最後的 BGM 規則整理成這樣:
VillageScene 和室內安全區播放村莊音樂。
TutorialScene 平時播放遺跡音樂;如果場景中有活著的敵人,就切成戰鬥音樂;史萊姆死亡後切回遺跡音樂。
ForestScene 播放戰鬥音樂。
ToCaveScene 播放洞穴道路音樂。
CaveScene 小怪階段播放洞穴道路音樂;Boss 開場對話結束後才切成戰鬥音樂。
Boss 死亡後,不再維持戰鬥音樂。
一開始的背景音樂不太適合,所以後來又換過一次。村莊和遺跡要比較輕快或有探索感,通往洞穴道路要更緊張,戰鬥音樂則要更緊湊。音樂來源也整理進 AudioCredits.md,方便後面寫素材來源。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373AAC3LTofMx.png

音效則加入四種:
主角揮空。
主角攻擊到敵人。
主角受傷。
敵人或 Boss 被消滅。

https://ithelp.ithome.com.tw/upload/images/20260927/201783737KaBnYfuow.png

測試音樂時,Game 視窗中間曾經出現一個喇叭圖示。
一開始看起來很像是遊戲 UI 出錯,因為它剛好出現在畫面中間,而且形狀又很像音訊提示。後來確認後才知道,這不是遊戲畫面裡的 UI,也不是我做出來的音效提示,而是 Unity Game 視窗開啟 Gizmos 後,顯示出來的 AudioListener 圖示。

也就是說,這個喇叭圖示不會出現在正式遊戲裡。
截圖時只要把 Game 視窗右上角的 Gizmos 關掉,它就會消失。
這裡順便也修正了 ToCaveScene 一開始出現的音訊警告。當時畫面出現白字提示,原因是 Main Camera 缺少 AudioListener,Unity 找不到可以接收音訊的監聽元件。後來補上 AudioListener 後,這個警告就消失了。Codex 也順手補到同樣缺少的 CaveScene 和 TavernInteriorScene,避免之後切場景時又出現同類問題。

這張圖不是用來證明哪一首音樂正在播放,而是記錄音訊系統測試過程中的 Unity 顯示問題。
所以 Day29 不再把每個場景音樂都拆成獨立截圖,而是用音檔資料夾、授權紀錄、GameAudioManager.cs 的判斷邏輯,以及 Play Mode 中的音訊圖示問題,整理成一段完整紀錄。

七、程式碼重點:GameAudioManager.cs
Day29 的音樂與音效主要由 GameAudioManager.cs 管理。
這支腳本負責全域音訊管理、載入背景音樂與音效、根據場景和戰鬥狀態切換 BGM,並提供揮空、命中、受傷、敵人死亡等音效播放入口。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373FvJ7VLovhT.png

第 6 到 13 行定義所有音檔在 Resources 裡的路徑:
Audio/bgm_village
Audio/bgm_ruins
Audio/bgm_battle
Audio/bgm_cave_road
Audio/sfx_player_swing_miss
Audio/sfx_player_hit_enemy
Audio/sfx_player_hurt
Audio/sfx_enemy_defeated
這些路徑對應到 Assets/Game/Audio/Resources/Audio 裡的音檔。
後面只要用 Resources.Load(),就能載入對應的背景音樂或音效。
這裡把音檔路徑集中寫在最上方,之後如果要換音樂或音效檔名,只需要改這裡,不用在整支程式裡到處找。

第 39 到 57 行提供四個靜態音效播放入口:
PlayPlayerAttackMiss()
PlayPlayerHitEnemy()
PlayPlayerHurt()
PlayEnemyDefeated()
這四個方法分別對應:
主角攻擊揮空。
主角攻擊命中敵人或 Boss 部位。
主角受傷。
敵人或 Boss 被消滅。
其他腳本不需要知道音效檔在哪,也不需要自己管理 AudioSource。
例如 PlayerAttack.cs 判斷攻擊命中時,只要呼叫 GameAudioManager.PlayPlayerHitEnemy();攻擊揮空時,就呼叫 GameAudioManager.PlayPlayerAttackMiss()。主角受傷、敵人死亡和 Boss 被擊敗,也都用同一套方式播放音效。Codex 的腳本修改說明中也整理了這些音效新增的位置。
這樣戰鬥腳本只負責戰鬥結果,音訊管理器只負責播放聲音。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373XxhsZgu7mD.pnghttps://ithelp.ithome.com.tw/upload/images/20260927/20178373qfYjk4OlQU.png

第 30 到 37 行使用 RuntimeInitializeOnLoadMethod,讓遊戲載入場景後自動初始化音訊管理器。
這段會呼叫 EnsureInstance(),確認場景裡有 GameAudioManager,接著註冊 SceneManager.sceneLoaded 事件。之後每次場景切換時,音訊管理器都會重新判斷目前場景應該播放哪一首背景音樂。
第 59 到 70 行是 EnsureInstance()。
如果 instance 已經存在,就直接回傳。
如果不存在,就建立一個新的 GameObject,掛上 GameAudioManager,並用:
DontDestroyOnLoad(audioObject)
讓它跨場景保留。

第 78 到 89 行的 Awake() 則負責避免重複產生音訊管理器。
如果場景中已經有一個 GameAudioManager,後來又出現第二個,新的那個就會被刪掉。
這樣可以避免多個音訊管理器同時存在。
如果沒有這段,玩家從村莊切到遺跡,再切到洞穴,每個場景都可能生成一個新的音訊管理器。

https://ithelp.ithome.com.tw/upload/images/20260927/201783738va9F1UNOz.pnghttps://ithelp.ithome.com.tw/upload/images/20260927/20178373NBGs6gjcbb.pnghttps://ithelp.ithome.com.tw/upload/images/20260927/20178373SzWsMoiA5J.png

第 102 到 127 行負責建立 AudioSource 並載入音檔。
這裡建立兩個 AudioSource:
musicSource
sfxSource
musicSource 用來播放背景音樂。
它會設定成 loop,因為背景音樂需要循環播放。
sfxSource 用來播放一次性音效。
它不 loop,因為揮空、命中、受傷、死亡這些音效只需要短暫播放一次。
接著程式用:
Resources.Load()
載入四種背景音樂與四種音效。
這樣背景音樂和短音效就分開管理。
背景音樂持續播放,音效則用 PlayOneShot() 疊加播放,不會互相搶同一條音源。

https://ithelp.ithome.com.tw/upload/images/20260927/201783731ivP81vEQv.png

第 130 到 160 行是背景音樂切換邏輯。
RefreshMusic() 會先呼叫 ChooseMusicForCurrentScene(),取得目前應該播放的音樂。
如果目前正在播放的音樂已經是正確的那一首,就不重新播放。
如果需要換音樂,才會把新的音樂指定給 musicSource.clip,並從頭開始播放。
這樣可以避免同一首音樂每隔幾秒就重新播放一次。
不然玩家站在村莊裡,背景音樂一直從第一秒重新開始,那不是村莊氛圍,是音訊版跳針。

ChooseMusicForCurrentScene() 會根據目前場景名稱與遊戲狀態選擇音樂:
ForestScene 播放戰鬥音樂。
CaveScene 如果 Boss 戰正在進行,就播放戰鬥音樂;否則播放洞穴道路音樂。
ToCaveScene 播放洞穴道路音樂。
TutorialScene 如果有活著的敵人,就播放戰鬥音樂;否則播放遺跡音樂。
VillageScene、主角家、村長家、酒館、武器匠鋪則播放村莊音樂。
第 163 到 179 行是兩個狀態判斷。
IsCaveBossBattleActive() 會判斷 Boss 開場對話是否已完成,而且 Boss 尚未被擊敗。
只有符合這個條件時,CaveScene 才會播放戰鬥音樂。

HasActiveEnemies() 會搜尋場景中所有 EnemyHealth。只要有敵人還活著,就回傳 true。
這讓 TutorialScene 可以在遺跡史萊姆還活著時播放戰鬥音樂,史萊姆死亡後再切回遺跡音樂。
這裡是 Day29 音樂系統的核心:音樂不是只看場景,而是看場景加狀態。
遺跡有怪時緊張,怪死後恢復平靜;洞穴小怪階段偏壓迫,Boss 戰正式開始後才切成戰鬥音樂。

八、程式碼重點:RuinRouteGuideController.cs
RuinRouteGuideController.cs 是 Day29 新增的遺跡路線控制腳本。
它只在 TutorialScene 生效,負責兩件事:
顯示村莊方向提示。
根據任務階段開關 special box1 和 special box2。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373unNwRq7EH8.pnghttps://ithelp.ithome.com.tw/upload/images/20260927/20178373j1b3TRVzel.png

第 6 到 13 行定義幾個重要常數:
TutorialSceneName = "TutorialScene"
VillageDirectionMarker = "Direction_ToVillage"
ForestBlockerName = "special box1"
CaveBlockerName = "special box2"
TutorialSceneName 用來限制這支腳本只在遺跡場景運作。
Direction_ToVillage 是村莊方向標記。
special box1 是擋住森林路的碰撞箱。
special box2 是擋住洞穴道路的碰撞箱。
這些名稱要和 Unity 場景裡的物件名稱完全一致。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373j8JzXQmkbJ.png

第 15 到 42 行處理場景載入後的自動建立。
這裡同樣使用 RuntimeInitializeOnLoadMethod,在場景載入後註冊 SceneManager.sceneLoaded 事件。
HandleSceneLoaded() 會先檢查目前場景是不是 TutorialScene。
如果不是,就直接 return。
如果是,就尋找場景中是否已經有 RuinRouteGuideController。
有的話就使用現有物件;沒有的話就建立一個新的 GameObject,並掛上 RuinRouteGuideController。
最後呼叫:
controller.Refresh()
這樣控制器只會在遺跡場景啟用,不會影響村莊、森林、洞穴或其他室內場景。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373VG5KTDBkNF.png

第 44 到 54 行負責更新與初始化。
Update() 每幀呼叫:
RefreshRouteBlockers()
這樣 special box1 和 special box2 的狀態會一直跟任務階段同步。
只要任務進度變化,路線封鎖就會立刻更新。
Refresh() 則會尋找:
Direction_ToVillage
並把它存成 villageMarker。
後面 OnGUI() 顯示 ↓ 村莊 時,就會使用這個 Marker 的位置。
這裡把方向提示和路線封鎖放在同一支控制器裡,因為它們都屬於遺跡場景的路線引導。一個告訴玩家方向,一個控制玩家是否能通行。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373UWsicsQrfH.png

第 56 到 70 行是路線封鎖的核心。
RefreshRouteBlockers() 會先讀取:
MainQuestState.CurrentStage
接著根據任務階段控制兩個擋路物件。
special box1 對應森林方向。
如果任務階段低於 ForestInvestigation,它保持啟用,玩家不能去森林。
當任務階段到達 ForestInvestigation,代表玩家已經接到前往森林調查的任務,special box1 就會關閉。
special box2 對應洞穴道路方向。

如果任務階段低於 PrepareForCave,它保持啟用,玩家不能前往洞穴道路。
當任務階段到達 PrepareForCave,代表玩家已經取得雷痕符文並完成武器匠確認,接到前往洞穴的任務,special box2 就會關閉。
這段就是 Day29 遺跡路線控制的核心。玩家不能一開始亂跑去森林,也不能太早去洞穴。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373sMdHQvTKqo.png

第 72 到 85 行是 FindSceneObject()。
這裡使用:
Resources.FindObjectsOfTypeAll()
它和普通的 GameObject.Find() 不一樣,可以找到 inactive 的物件。
這很重要,因為 special box1 和 special box2 會被程式關閉。
如果使用普通搜尋,物件一旦 inactive,下一次就找不到。
但路線控制腳本需要能找到它們,才能在任務階段改變時重新設定狀態。
所以這段會搜尋所有 GameObject,再判斷名稱是否符合,並確認該物件屬於有效場景。
這樣就算 special box1 或 special box2 已經被關閉,腳本還是能找到它們。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373EooPcfIbcb.png

第 87 到 105 行是 OnGUI(),負責在畫面上顯示村莊方向提示。
如果 villageMarker 不存在、背包 UI 正在開啟、或 Camera.main 不存在,就不顯示。
這可以避免提示文字在錯誤狀態下出現,也能避免背包畫面被方向標籤干擾。
接著程式會把 villageMarker 的世界座標轉成螢幕座標:
Camera.main.WorldToScreenPoint(...)
然後在該位置上方畫出:
↓ 村莊
這樣玩家在遺跡場景中,就能看到村莊方向提示。
這個提示不是地圖系統,只是一個簡單路牌文字,但對玩家有幫助。
尤其遺跡場景開始連接村莊、森林與洞穴道路後,沒有方向提示容易迷路。

https://ithelp.ithome.com.tw/upload/images/20260927/20178373Vth1gHG4yD.png

第 107 到 139 行是 EnsureStyle() 和 OnDestroy()。
EnsureStyle() 會建立一張 1x1 的半透明黑色背景貼圖,然後建立一個 GUIStyle。
這個樣式包含:
文字置中。
字體大小 16。
粗體。
文字顏色偏黃色。
背景是半透明黑色。
這樣 ↓ 村莊 不會直接貼在複雜地圖上看不清楚,而是有一塊黑色半透明背景,提高可讀性。
OnDestroy() 則會在物件銷毀時清掉 labelBackground。
這是為了避免臨時建立的 Texture2D 殘留。

九、其他腳本音效修改
除了 GameAudioManager.cs,Day29 也在幾個既有戰鬥腳本裡補上音效呼叫。
PlayerAttack.cs 第 189 到 200 行加入攻擊結果音效。
如果打中 Boss 部位或一般敵人,就播放命中音效;如果攻擊揮空,就播放揮空音效。原本的文字提示仍然保留。
PlayerHealth.cs 第 38 行加入主角受傷音效。
主角真的扣血後,除了顯示受傷文字,也會播放受傷音效。
EnemyHealth.cs 第 93 行加入敵人死亡音效。
一般小怪死亡時,會播放敵人被消滅的音效。
BossCoreBattleController.cs 第 197 行也加入 Boss 被擊敗音效。
Boss 死亡時會播放敵人被消滅音效,讓 Boss 戰結束時有更明確的聲音回饋。
這些修改不改變玩法,但會讓戰鬥回饋更完整。
同樣是揮拳,有沒有聲音差很多。沒有音效時,玩家只能看血條和文字;有音效後,揮空、命中、受傷、擊殺都能直接被感受到。

十、Day29 小結
Day29 完成後,整個專案的主線銜接更完整。
遺跡可以通往洞穴道路。
洞穴道路可以回到遺跡。
村莊與洞穴道路回遺跡有不同落點。
遺跡史萊姆開場事件補回來。
史萊姆顯示問題透過 Sorting Layer 修正。
遺跡有村莊方向標識。
森林與洞穴道路用 special box1、special box2 依任務階段封鎖。
Boss 戰後可以回村長家回報。
Boss 戰後不會再觸發舊任務對話。
村莊、遺跡、洞穴道路、戰鬥都有對應背景音樂。
主角揮空、命中、受傷、敵人死亡都有音效。
CaveScene 小怪階段播放洞穴道路音樂,Boss 戰開始後才切戰鬥音樂。
Unity 的 AudioListener 白字警告與 Game 視窗喇叭圖示也完成處理。
這一天做的內容不像 Boss 技能那麼顯眼,但它讓整個遊戲流程變得更完整。
玩家可以從遺跡出發,依任務進度解鎖森林與洞穴道路,最後擊敗 Boss 回村回報。音樂與音效也讓場景氛圍和戰鬥回饋更清楚。

Day29 的重點,就是把前面做好的功能開始串成一條比較像樣的完整路線。
這種工作很瑣碎,還常常伴隨各種小爆炸。物件不見、史萊姆被地板蓋住、AudioListener 缺失、Gizmos 喇叭跑出來。


上一篇
Day 28:Boss 攻擊、洞穴進出口與戰後離場流程
系列文
Unity進階——做一個完整的遊戲 共 29 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言