創作內容

7 GP

極簡RPG戰鬥系統

作者:KK│2020-09-17 17:00:17│巴幣:1,012│人氣:453

實際上應該是你一拳我一拳的回合制戰鬥,

不會有交叉反擊拳的激烈戰況啦 XD"

本篇會試著想拿一些不錯的結構,用 Unity C# 來實作看看。

那我們開始囉:)


RPG 的遊戲中,角色是有很多種屬性的,

但不是所有數值都跟戰鬥有掛鉤,

同樣的怪物、敵人,也同樣也用於戰鬥的屬性;

遇到共同的屬性部分,我們可以使用抽象類別來處理。


定義了一個基礎屬性,內含戰鬥相關數值,且有兩個函數。


如此一來,角色就不用寫的那麼冗長,直接繼承基礎屬性。

而且也可以在這邊額外定義一些角色獨有的數值,範例是魔力。

接著利用建構子將資料寫入相對應的屬性,並覆寫自報姓名,加上一點修飾。


同理,怪物也有基礎屬性,並在建構子做同樣的事情。

不過怪物沒有魔力屬性,並也覆寫了自報姓名的方法。

( 誰有誰沒有哪些屬性,這部分可以自由擴充的,有些角色吃怒氣、吃能量值,但沒有魔力。)

目前看下來是好的開始,不過問題就來了

假設我有其它怪物規格,稀有怪、傳說怪或聖獸等......

難不成要回到基礎屬性,額外定義一些變數之後再各自覆寫嗎?


其實不用這麼麻煩,我們可以使用虛擬屬性跟方法來處理。

假設有一個怪物的規格定義跟怪物有 87% 像,但就是無法收服。

那麼我們就可以寫一個這樣的類別去繼承這個怪物並實作虛擬方法。


一個無法被收服的傳說級怪物,但仍有怪物該有的戰鬥相關屬性這樣就寫完了。

值得注意的部分是,繼承了原有建構子的類別,自己的建構子處也要繼承去接,

不過只要讓接口知道要傳那些參數就可以了,建構子內部可以不用寫。

就目前已有的資料來做個測試吧~~~


一個 MonoBehaviour,可以掛在 Unity 場景上任何一個物件上,方便我們看效果。

Debug.Log 來看大家的自報姓名,跟捕捉資訊。


差不多是這個樣子,屬性都有了,那我們就直接進入戰鬥部分。

我直接把戰鬥公式用一個類別包起來,


提供了兩個方法,一個是檢查玩家是否先手,速度快的人先動。( 規則細節可以自由更改 )

再來就是基本傷害公式,註解已經打了,這邊就不再重複一次。

值得注意的部分是上面帶的參數都是 "BaseAttribute" 喔,也就是保留了非常大的彈性,

玩家可以打自己,怪物可以跟怪物打,怪物也可以對傳說神獸發起戰鬥。

不用因為只能傳入 Player Monster ,再為日後的擴充感到綁手綁腳。

至於上面提到的技能資料。


一個小東西,在這次的範例不是重點。

接著就要進行極簡戰鬥系統的測試了

回到 BattleSystem 那個腳本,


剛剛寫的預設參數方法,會以這樣的形式來使用。

另外因為是回合制戰鬥,所以要有一個標籤紀錄現在是誰的回合( bool : enemyTurn )

最後相似的寫法另外丟一個 NextRound 的方法中,

利用 InvokeRepeating ,重複定時呼叫來做展示。

( 第二個數字 0 表示,0 秒後開始;最後一個參數,表示 1 秒呼叫一次。 )


NextRound 裡改成判斷誰的回合,並直接使用基礎屬性定義的 Live 方法做勝負檢查。

由於使用 InvokeRepeating,所以要記得戰鬥結束時 CancelInvoke() 停止所有呼叫

這樣,我們就可以實際戰鬥看看。


至此,極簡 RPG 戰鬥系統實作完成。

也許你會覺得文字的演示有點空虛,

還記得我之前提過的系統的邏輯跟表演拆開,就功能來說確實已經做完了。

BattleSystem 本身是 Mono ,在上面取得資料是很容易的,

拿去做 UI 展示,血量變化,戰鬥文字誇張效果都可以。

角色部分都是資料型態,想要綁在 prefab 上或是 script object 都可以。


今天把這兩塊拆開,當遇到問題時,如果有人問說為什麼血量沒有第一時間變化,

可是被打第二下就會大噴血!?好奇怪的 BUG,可以檢查一下嗎。

這個時候我們需要回頭檢查今天這些腳本嗎?完全不用XDDDD

去看 UI 那塊就知道答案了。

同理,為什麼今天傷害怎麼打都是 0999,血量條也沒有變化;

這個時候就是回頭去檢查公式了。

技能資料的部分就當作一個練習留給有興趣自己寫一遍的人,

以你們玩過的遊戲中來想,

技能有分哪幾種呢?

它們之間是否存在著共同的部分,可以將它抽出當作抽象類別使用,

然後再定義更直覺的技能大類別來繼承它們,

如此一來戰鬥系統就有兩處還不錯使用的結構好維護了。

關於公式的部分,

因為是極簡戰鬥,所以沒有用到太多更複雜的計算,

例如敏捷影響爆擊、耐力影響防禦減免係數甚至屬性相剋......等,

那個戰鬥公式也可以列的更複雜,這些都歡迎自由拿去擴充修改。

這篇的專案跟相關腳本都放在這裡,那個測試場景可以看效果,

也歡迎自由取用研究。


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4919605
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:抽象類別|虛擬方法|RPG戰鬥|Unity

留言共 5 篇留言

樂小呈
比較可惜的是 abstract也要用繼承的,不能像interface可以疊好幾種[e8]

09-17 17:23

KK
我本來想把介面也放入做運用的,可是篇幅就會被拉長而且會模糊焦點,介面真心好用沒錯XD09-17 17:49
佐佐拉茶
不懂程式但是按讚[e19]

09-17 18:41

KK
謝謝^~^,你可以給縮圖讚,我會大方地收下的。[e2]09-17 20:11
矮鵝
我看過最簡的戰鬥是這樣 : https://www.youtube.com/watch?v=3BeYJQrtT04

09-19 06:38

KK
這個好酷喔~我完全看不到揮劍的那一瞬間啊!09-19 11:33
thenewguy
果然是程式老手!我弄程式都只求能動就好了XD

09-27 01:34

KK
領域不同而已啦,我光一個傅立葉轉換就可以寫一個月XD09-27 10:53
KT Shot
你好,想問一下,您的專案下載完後打開來後沒有顯示場景,這是為甚麼呢?

11-19 14:07

KK
你好唷,這個專案應該是沒有場景的,主要是完成了戰鬥"系統",想要讓它再好看一點就需要UI幫忙(我的美術很弱,所以沒有往後面繼續做),到這個階段就能接近巴哈的勇者PK,要再更漂亮一點如回合制戰棋或2D武俠遊戲那種,就需要"美術"資源/支援了,而遊戲就是由這麼多東西所組成,所以這篇只有單就系統去介紹,若對這個結構有不了解的部分,歡迎繼續問我。11-19 15:02
我要留言提醒:您尚未登入,請先登入再留言

7喜歡★nigel0813 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:桃太郎... 後一篇:是你那深情的眼眸與優美的...

追蹤私訊切換新版閱覽

作品資料夾

badaopeter     
敬請觀賞指教喔!!!看更多我要大聲說昨天21:03


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】