前一天我完成了武器匠鋪。玩家可以進入店內、和武器匠對話,也可以打開拳套與符文交易介面。完成武器匠對話後,目前目標會更新為:
前往森林,調查五色寶光
所以 Day 25 的重點,就是把森林從單純的地圖,改造成第一個真正會戰鬥、會掉落、會阻擋玩家推進的危險區域。這一天的文章口徑固定為「拳套與符文戰鬥系統」。主角用拳擊攻擊,拳套提供基礎傷害,符文提供額外傷害與劇情門檻。小怪死亡後會掉落金幣,也可能掉落普通或精英拳套 / 符文。森林深處的精英怪會守在通往寶箱的小路上,而寶箱裡放的是傳說符文「雷痕符文」。
Day25 不做完整背包 UI,也不做商店雙欄交易的最終整理。這些留到 Day26。今天先把森林的戰鬥環境、掉落循環和精英怪門檻建立起來。否則背包再漂亮,也只是玩家在安全村莊裡整理一堆暫時沒地方用的東西,跟現代人買健身器材差不多。






首先是玩家攻擊系統。PlayerAttack.cs 負責處理主角按 J 攻擊、判斷攻擊方向、播放攻擊動畫,以及對前方敵人造成傷害。
這裡要截第 6 到 14 行,顯示攻擊範圍、冷卻時間、攻擊方向與動畫引用。
第 44 到 63 行則是讀取輸入,玩家按下 J 時觸發攻擊。
第 65 到 128 行是攻擊流程,包含播放攻擊動畫、讀取拳套與符文總傷害、偵測敵人、命中後扣血。
第 130 到 171 行則負責依照 WASD、方向鍵或目前面向決定攻擊方向,並顯示操作提示。
玩家按 J 會進行一次拳擊攻擊。攻擊方向優先看玩家當下按著哪個方向鍵,如果沒有按方向鍵,就使用角色目前面向。真正造成的傷害不是寫死在攻擊腳本裡,而是從背包讀取目前拳套與符文的總傷害。這讓 Day24 建立的拳套與符文資料,不只是商店 UI 上的文字,而是真的會影響森林戰鬥。




接著是主角生命值。森林小怪會攻擊玩家,所以主角需要 HP、受傷判定和短暫無敵時間。
這裡可以截 PlayerHealth.cs 第 5 到 14 行,顯示最大生命、無敵時間和目前生命值。第 16 到 20 行是進入場景時給主角短暫無敵。第 22 到 40 行是受傷、短暫無敵,以及測試用死亡後回滿血。第 42 到 55 行則處理劇情對白結束後的安全時間,並在畫面左上角顯示 HP。
這次為了方便測試,主角死亡後先回滿血,不會直接重新載入場景。這樣測森林小怪、精英怪和寶箱流程時,不會每死一次就重走一大段流程。玩家進入森林時也會有短暫無敵,避免剛載入或還在看開場對白時就被小怪偷襲。





小怪也需要生命值。EnemyHealth.cs 負責管理小怪血量、受傷閃白、死亡、血條顯示,以及死亡後呼叫掉落。
這裡可以截第 6 到 18 行,顯示小怪名稱、最大血量 200、血條偏移和目前血量。第 20 到 36 行是初始化血量與受擊閃白恢復。第 38 到 69 行是受傷、死亡、觸發掉落和刪除小怪。第 71 到 107 行則負責血條顯示,並讓血條位置跟隨真正顯示怪物圖像的 SpriteRenderer。
小怪現在有 200 點生命值,不會被主角隨便打一下就消失。受傷時會短暫閃白,讓玩家知道攻擊有命中。血量歸零後,小怪會先呼叫掉落腳本,再從場上消失。血條不是單純跟著根物件,而是跟著 Visual 上的 SpriteRenderer。這樣即使怪物圖片和根物件有一點位置偏移,血條仍然能顯示在怪物本體附近。



接著是掉落系統。EnemyLootDrop.cs 負責小怪死亡後給玩家金幣,也有機率掉落拳套或符文。
這裡可以截第 6 到 15 行,顯示掉落資料、金幣範圍 5 到 8,以及裝備掉落表。第 17 到 25 行是死亡後給玩家金幣。第 27 到 39 行則是依照機率掉落拳套或符文,並加入玩家背包資料。
小怪死亡後會掉落 5 到 8 枚金幣,也有機率掉落拳套或符文。掉落前會先把道具資料整理成目前劇情使用的拳套 / 符文格式,再加入玩家背包。這樣森林就能成為玩家刷金幣和裝備來源的地方。玩家之後要買赤鋒符文,不是直接靠劇情送,而是需要先進森林打小怪、累積金幣,再回武器匠鋪購買。



小怪不能只是站在原地等玩家打。SimpleEnemyChase.cs 負責讓小怪在玩家靠近時追擊玩家。
第 3 到 14 行,顯示需要 Rigidbody2D、移動速度、追擊距離、停止距離與移動狀態。
第 16 到 21 行固定 Rigidbody2D 的重力與旋轉。
第 23 到 57 行則處理敵人暫停、尋找玩家、距離判斷與追擊移動。
森林小怪不需要很複雜的 AI,但至少要會在玩家靠近時追擊。這裡用簡單距離判斷控制小怪:玩家在追擊範圍外,小怪不動;玩家進入範圍,小怪往玩家方向移動;靠太近時停止,交給接觸傷害處理。
這樣森林小怪就不是裝飾品,而是真的會給玩家壓力。牠們終於從背景道具升級成會添麻煩的東西,職涯發展很明確。



小怪追上玩家後,需要能造成傷害。EnemyContactDamage.cs 負責接觸攻擊。
第 5 到 8 行,顯示接觸傷害與攻擊間隔。
第 10 到 18 行說明碰撞或 Trigger 都能觸發。
第 20 到 45 行則處理暫停期間不扣血、找到主角生命值後扣血,以及成功扣血才播放攻擊動畫。
小怪碰到玩家時會造成傷害,但不是每一幀都扣血,而是依照攻擊間隔觸發。若玩家處於無敵時間,這次攻擊不算成功,小怪也不播放攻擊動畫。這樣可以避免畫面上看起來小怪打中了,但血量沒有變。








這次小怪素材是靜態 PNG,所以需要用程式式動畫讓牠們看起來會動。EnemyVisualAnimator.cs 就是處理這件事。
第 5 到 23 行,顯示移動動畫、攻擊動畫、攻擊變色與特效欄位。
第 25 到 38 行取得 Visual 上的 SpriteRenderer,並建立攻擊特效。
第 40 到 77 行根據追擊狀態播放移動、待機或攻擊動畫。第 79 到 126 行用程式產生短暫攻擊特效。第 151 到 185 行則讓小怪移動時上下浮動,攻擊時前撲、壓縮放大、變色。第 200 到 226 行讓攻擊特效出現在怪物攻擊方向前方。
小怪移動時會上下浮動、壓縮伸展,並朝向玩家。攻擊時會前撲、變紅,前方也會出現短暫撞擊特效。這樣即使怪物本身不是逐格動畫,也能有基本動態表現。玩家不用只看文字訊息,也能從畫面知道小怪正在移動或攻擊。







森林一進場會有內心對白。如果玩家還在看文字,小怪就開始追擊,體驗會很糟。這不是難度設計,這是系統沒教養。所以這裡用了 GameplayPauseState.cs 和 ExplorationTextTrigger.cs。
GameplayPauseState.cs 第 1 到 8 行,顯示敵人暫停狀態。
第 8 到 19 行是要求暫停與釋放暫停。第 21 到 35 行是對白關閉後保留短暫安全時間。
ExplorationTextTrigger.cs 第 17 到 21 行,顯示開場自動顯示、暫停敵人、恢復延遲和主角無敵時間。
第 105 到 115 行是文字面板開啟時要求暫停敵人。
第 129 到 180 行則是在文字面板關閉時釋放暫停、延遲恢復敵人,並給主角短暫無敵。
這樣玩家進入森林後,可以先看完開場內心對白。對白開啟時小怪停止,對白關閉後還會保留短暫安全時間,讓玩家有時間開始操作。閱讀時間和戰鬥時間要分開。玩家還在讀字,小怪就來打人,這不是沉浸感,是搶劫。




接著是森林深處的精英怪。EliteGuardianCombat.cs 負責處理精英怪戰鬥開始條件、裝備門檻和死亡後開啟寶箱條件。
第 5 到 11 行,顯示需要精英拳套與史詩符文,以及低階裝備提示。
第 20 到 34 行是一開始關閉精英怪追擊與接觸傷害。
第 44 到 63 行是對話前攻擊無效,對話後檢查拳套與符文品質。
第 65 到 80 行則是對話完成後開戰,精英怪死亡後開啟寶箱條件。
精英怪不是普通小怪,而是森林深處的門檻。玩家在對話前不能直接造成傷害;對話後,如果只用普通拳套或低階符文,也只能造成很低傷害。真正能有效挑戰牠的配置,是精英拳套搭配史詩符文。
這樣玩家會理解為什麼要回武器匠鋪購買赤鋒符文,而不是一路用新手拳套把整個森林打穿。







精英怪不能像普通小怪一樣無聲開打。EliteGuardianDialogueInteraction.cs 負責精英怪對話與開戰流程。
第 8 到 10 行,顯示指定精英怪與互動提示。
第 10 到 77 行是每句話的說話者。第 79 到 138 行是精英怪與主角完整對話,內容圍繞雷痕符文。
第 226 到 255 行負責打開對話、推進對話,完成後呼叫 guardian.BeginCombat()。
第 257 到 304 行是在對話關閉後釋放敵人暫停,並給主角短暫無敵。第 306 到 334 行則在畫面上繪製對話框與互動提示。
玩家靠近後會先看到:
按 E 與精英怪對峙
接著進入主角與精英怪的對話。這段對話說明森林異常與雷痕符文有關,也讓精英怪從單純怪物變成劇情節點。
對話完成後,才會呼叫 BeginCombat(),精英怪正式開戰。




如果玩家能直接走到精英怪面前,森林小怪就失去意義。所以這裡加入 SmallMonsterClearGate.cs,讓小怪清空前的道路被空氣牆阻擋。
第 7 到 10 行,顯示檢查的小怪群組與提示文字。
第 22 到 28 行是小怪清乾淨後自動解除空氣牆。第 30 到 49 行是玩家撞到牆時顯示提示。
第 51 到 72 行則檢查是否還有活著的小怪,清空後關閉碰撞箱。
這道牆不是裝飾,而是流程門檻。只有 ForestSmallMonsters 底下的小怪全部被清掉,空氣牆才會解除。
這樣玩家必須先完成森林前半段戰鬥,才能進入精英怪區域。




森林深處寶箱的獎勵不是傳說武器,而是傳說符文「雷痕符文」。LegendaryChestInteraction.cs 負責這個寶箱互動。
第 4 到 17 行,顯示寶箱獎勵是傳說符文「雷痕符文」。
第 23 到 40 行是玩家在範圍內按 E 嘗試開箱。
第 66 到 77 行是精英怪未擊敗時鎖住,擊敗後把雷痕符文加入背包資料。第 79 到 89 行則是靠近寶箱時顯示提示。
雷痕符文不能直接讓玩家撿走,否則精英怪就失去作用。
寶箱會檢查精英怪是否已經被擊敗。精英怪還活著時,玩家只能看到鎖定提示;精英怪倒下後,玩家按 E 才能取得雷痕符文。












最後是 Day25ForestCombatOrganizer.cs。這個工具不是正式玩法,而是把正常 Unity 操作自動化。
第 58 到 69 行,顯示小怪可掉落的拳套 / 符文與雷痕符文資料。
第 80 到 93 行是建立森林小怪戰鬥與掉落工具入口。
第 104 到 112 行是同步小怪碰撞箱工具入口。
第 117 到 130 行是建立精英怪、對話、空氣牆與寶箱工具入口。第 206 到 254 行依照怪物標記建立小怪,並掛上戰鬥與掉落元件。
第 258 到 347 行建立精英怪、對話觸發區、空氣牆與雷痕符文寶箱。
第 462 到 476 行設定小怪血量 200、精英怪血量 4000。
第 537 到 549 行設定小怪掉落 5 到 8 金幣,以及拳套 / 符文掉落率。第 585 到 610 行把小怪與拳套 / 符文 PNG 匯入為 Sprite。
這個工具做的正常 Unity 流程是:先匯入五張小怪圖,接著沿著森林怪物標記放置多隻小怪,為每隻小怪加上血量、追擊、碰撞傷害、動畫與掉落。精英怪則放在寶箱路線前方,並額外建立對話觸發區、空氣牆與雷痕符文寶箱。
工具只是把重複操作自動化,不是遊戲內容本身









接著進入 Unity 場景和測試截圖。
在 Project 視窗打開:
Assets/Game/Generated/Day25/Monsters
可以看到五張小怪 PNG:
forest_boar.png
forest_slime.png
forest_bat.png
forest_mushroom.png
forest_rootling.png
森林需要多種小怪,不能整張地圖都使用同一個敵人圖像。這次先準備五種森林怪物,讓玩家沿著泥土路推進時能遇到不同敵人。
小怪本身雖然是靜態圖片,但後面會用程式式動畫讓牠們移動和攻擊。

接著執行:
IronRPG > Day 25 > 1 Setup Forest Small Monster Combat And Drops
執行後選取 ForestSmallMonsters,Scene 視窗中可以看到小怪沿著森林主路分布。
Day20 已經放好小怪出生點,這一步把標記點轉成真正的小怪。小怪會沿著森林路線分布,形成玩家進入森林後的第一段戰鬥壓力。

選取任一 SmallMonster_*,Inspector 中可以看到它的完整元件。
需要截到:
Transform Scale = (0.8, 0.8, 1)
子物件 Visual
EnemyHealth
SimpleEnemyChase
EnemyVisualAnimator
EnemyContactDamage
EnemyLootDrop
每隻小怪都不是單純圖片。它有生命值、追擊邏輯、接觸傷害、視覺動畫與掉落資料,已經具備基本戰鬥單位的功能。這裡也可以看到 Visual 子物件的設計。圖像和碰撞分開後,後續動畫比較不會干擾實際判定。

進入 Play Mode,讓玩家靠近小怪。小怪進入追擊距離後會開始往玩家靠近。玩家按 J,主角會朝前方進行拳擊攻擊。這張圖可以截到小怪血條下降,或畫面上出現攻擊命中訊息。進入森林後,小怪會在玩家靠近時追擊。玩家按 J 可以用拳擊攻擊前方敵人,命中後會依照目前拳套與符文傷害扣血。

接著讓小怪接觸玩家。小怪接觸玩家後,會造成傷害,玩家 HP 下降。小怪也會播放攻擊動畫,例如前撲、變色,或出現短暫攻擊特效。這張圖要截到玩家 HP 下降、小怪前撲、變色或攻擊特效。
小怪碰到玩家時會造成傷害,並播放攻擊動畫。怪物會短暫前撲、變色,前方也會出現撞擊特效,讓玩家從畫面上看出怪物正在攻擊。戰鬥不能只靠數字變化。

接著擊敗小怪,觀察掉落訊息。這張圖可以截到獲得金幣訊息,或拳套 / 符文掉落訊息。
小怪死亡後會掉落 5 到 8 枚金幣,也可能掉落拳套或符文。這讓森林成為玩家累積金幣與裝備的主要地點。
這一步把 Day24 的武器匠鋪和 Day25 的森林戰鬥接起來。玩家不只是打怪過路,而是透過打怪取得資源,再回到武器匠鋪強化裝備。

如果後來手動調整過 Visual,就執行:
IronRPG > Day 25 > 2 Align Existing Monster Colliders To Visuals
執行後選取任一小怪,Scene 視窗中可以看到碰撞箱貼近怪物本體。
如果只移動 Visual,碰撞箱不會自動跟著圖像走。同步工具會把碰撞箱對齊到怪物圖像,避免玩家攻擊或被攻擊的位置和畫面不一致。這張圖主要用來說明:畫面位置和碰撞位置必須一致。

進入森林後,開場內心對白會顯示。這時小怪應該停止追擊,玩家 HP 也不應該在對白期間被打掉。
這張圖可以截 Play Mode 中開場對白正在顯示,小怪停止追擊的狀態。
開場對白是閱讀時間,不應該讓小怪趁機攻擊玩家。對白開啟時敵人會暫停,對白關閉後還會保留短暫安全時間。
這一步讓劇情顯示和戰鬥系統不互相干擾。

接著執行:
IronRPG > Day 25 > 3 Setup Elite Monster And Legendary Chest
執行後在 Hierarchy 選取 ForestEliteEncounter。Scene 視窗中要截到:
SmallMonsterClearAirWall
EliteMonster_ForestGuardian
EliteGuardianDialogueTrigger
LegendaryChestInteraction
LegendaryChest_Placeholder
森林深處不是直接放一個寶箱,而是建立完整門檻。玩家要先清小怪,才能通過空氣牆;靠近精英怪後先觸發對話;擊敗精英怪後才可以開啟寶箱。

進入 Play Mode,在小怪還沒清完前,玩家往精英怪小路走,會被 SmallMonsterClearAirWall 擋住。畫面會出現小怪還沒清乾淨的提示。
這道空氣牆確保玩家不能跳過森林小怪。只有清完森林小怪後,通往精英怪的小路才會打開。這樣森林前半段小怪才有存在意義。

清掉小怪後,玩家靠近精英怪。畫面會出現:
按 E 與精英怪對峙
按下 E 後,進入精英怪對話。第一句可以截精英怪台詞:
停下。精英怪是劇情節點,不是普通小怪。玩家必須先和牠對話,了解雷痕符文、洞穴 Boss 和森林異常之間的關係,對話結束後戰鬥才開始。這樣精英怪不只是血比較厚,而是和主線有關。

精英怪對話結束後,畫面會顯示:
精英怪發出低吼,戰鬥開始。
接著精英怪開始追擊或攻擊玩家。
精英怪在對話前不會主動追擊,也不會造成接觸傷害。對話完成後,戰鬥元件才啟用,玩家正式進入精英怪戰鬥。

接著測試普通拳套或低階符文攻擊精英怪。畫面應該會出現提示,例如普通拳套和低階符文只能刮傷精英怪,精英怪血條也只下降很少。
低階拳套與低階符文不是完全不能命中精英怪,但只能造成很低傷害。這讓玩家理解自己不是操作錯誤,而是需要更好的拳套與符文。
這也把 Day24 的武器匠鋪交易系統和 Day25 的森林精英怪門檻接起來。玩家需要刷金幣,回去購買精鐵拳套與赤鋒符文,再來挑戰精英怪。

選取 LegendaryChestInteraction,Inspector 中要截到:
legendaryRune = 雷痕符文
openedMessage = 獲得傳說符文:雷痕符文。雷痕符文已承認你。
森林寶箱的獎勵是雷痕符文,不是普通掉落道具,也不是傳說武器。它必須等精英怪被擊敗後才能開啟,並且會成為後續洞穴 Boss 的關鍵道具。

最後測試擊敗精英怪後開啟寶箱。精英怪被擊敗後,玩家靠近寶箱並按 E,會取得雷痕符文。
這張圖要截到獲得雷痕符文的訊息。擊敗精英怪後,寶箱才會承認玩家可以開啟。玩家取得雷痕符文後,森林深處的主線目的就完成了,下一步可以回到武器匠鋪確認這枚符文的用途。
Day25 到這裡完成了森林戰鬥區域的核心功能。
今天完成的內容包括:
玩家拳擊攻擊。
主角生命值與短暫無敵。
小怪生命值、血條與死亡。
小怪追擊玩家。
小怪接觸攻擊。
小怪移動與攻擊動畫。
金幣、拳套與符文掉落。
開場對白期間暫停敵人。
小怪清空前的空氣牆。
精英怪對話後開戰。
低階裝備對精英怪傷害很低。
雷痕符文寶箱。
擊敗精英怪後取得雷痕符文。
Day26 會繼續補背包與裝備管理。
例如按 B 打開背包,用格子顯示拳套與符文,玩家可以在背包中裝備拳套、鑲嵌符文。武器匠鋪交易畫面也會繼續整理,讓商店和背包能更清楚地配合。
Day25 的重點是讓森林真正變成可戰鬥區域。
小怪會動、會攻擊、會掉落;玩家能用拳套與符文造成傷害;精英怪與雷痕符文寶箱也被放進主線路徑中。