小屋創作

日誌2015-08-19 16:34

【實作分享】以Unity實作棋盤式戰鬥遊戲(SLG)

作者:冷宮



  大家好,我是冷宮先生!今天要發一個和小說完全無關的東西XD。

  老實說,我國高中的時候,對寫遊戲這件事充滿了憧憬,不過總是三分鐘熱度,根本沒辦法靜下心來學習。後來誤打誤撞,讀了需要寫程式的科系,到了大學做專題的時候,就決定乾脆來寫一款RPG,從3D模型、動畫到程式腳本,幾乎全都是自己從零開始學習製作的。

  當然,這一路上碰到過很多次瓶頸,多虧有好心的高手前輩願意指導,否則最後可能會什麼也做不出來。

  於是乎,我也認為自己該有些回饋,把自己的一些實作成果分享出來,讓一些剛入門或找不到參考資料的人能有個方向。

  那麼,進入正題。

  我在專題中是以Unity3D這套軟體,搭配3ds max來製作我們的RPG,其中在戰鬥的部份,我們選擇了「棋盤式回合制」的戰鬥方式。這在近期的遊戲中似乎比較少見(?),不過在十年前左右還是挺流行的,很多單機遊戲都會採用這種遊戲方式,增加趣味性。

  雖說同樣是棋盤式遊戲,但是不同的遊戲之間,仍然存在不同的「行走規則」。有些軍事類遊戲可以走六個方向,有些冒險類遊戲可以走八個方向,而我們的遊戲則是只能走四個方向。

  像知名遊戲「空之軌跡」,就是可以走八個方向,而且在「移動」這項功能中,也比較不會因為被怪物阻擋而減少「可移動的距離」。

  而我們的遊戲只能走四個方向,意即「上、下、左、右」,如果移動路徑上有怪物,由於無法直接穿越的關係,所以會影響到角色「可移動的距離」,原本可以走到的位置,有可能會因此走不到。

  之所以要解釋這個,是因為不同的「行走規則」,在程式撰寫上會需要不同的演算法。也許不同的規則之間,概念並不會相差太多,但執行的結果就是不同,所以在寫程式之前,必須先確定你的需求、想要的是什麼樣的棋盤式遊戲,免得白忙一場。

  (題外話,我個人認為SLG並不容易寫,雖然玩家操作的時候很簡單,但是它背後的演算法其實很複雜,至少我們選用的這套規則是這樣。)

  由於程式演算法過於繁雜,我會在文末附上連結,同時也會提供完整的Unity範例檔,有需要的人可以下載參考,這裡我就只先簡單介紹一些參數。


  


  首先,下載完檔案後,就先把chessPlay的場景打開(圖中的ChessTest為舊檔名,在拍圖時忘記更改,其檔案內容與chessPlay完全相同)





  打開後,我們可以在專案中看見一些預製物(prefabs)以及程式(Script)。

  我們先檢視場景中的 lin-je-chi 這個模型,他是我們的主要玩家角色,在範本中只有他能被操控。我們可以在最右邊的視圖中,看見他所裝載的腳本。

  「Path」是用來計算「可移動範圍」,它的參數「M」可以用來調整最大移動距離(圖中設定為可移動5格)。

  「Player Controller」是用來讓角色「平滑移動」,其中有些參數有和「Path」共用。它的參數「Move Speed」可以用來調整角色移動的速度,圖中設定為2。





  我在攝影機上也裝了一個腳本,可以產生一個「拉遠拉近」的效果,遠近的程度可以透過上圖的兩個參數控制。

  如果你不想要有這種效果,可以將兩個參數數值設定成同一個常數。直接刪掉腳本我不確定是否會出錯,因為「Camera Control」的公用參數(public),在其他腳本中也有被呼叫使用。





  大致上就是這樣,至於那些紅色方塊則是怪物的替代品。啊,還有一點需要注意,就是棋盤上的角色和怪物,他們的X座標與Z座標必須為整數,否則無法正確執行(這是出於我程式設計的關係)。

  一開始是想盡量設計成方便好用的模組,讓不懂程式的人也能使用,不過寫到後來真的覺得有困難。詳細的腳本裝載跟設定,可以直接參考範例檔會比較清楚。

  事實上,我這個程式還不算寫完,例如角色移動時的「跑步動作」,我還沒寫進程式裡(其實是懶得寫)。而且「移動」只是SLG的其中一項功能,其他還有「攻擊」、「技能」、「道具」等等的,我都沒寫完。

  還有一個最最最重要的,那就是怪物的AI系統啊!我覺得這大概是最難寫的部份,但是要完成這些,才有辦法讓別人去玩你設計的SLG,這絕對不是一件容易的事,有心的人真的要加油,不要放棄!

  如果有任何問題的話(像是我的程式BUG啊、解說錯誤啊、或者你覺得怎麼寫更好),都歡迎在底下留言,或是寄站內信討論。

  那麼,希望這篇實作分享能對你有幫助喔!

  程式演算法說明及Unity範例下載:【實作】以Unity實現SRPG的棋盤式移動
  參考資料:SLG遊戲之路徑尋找 (我當初是參考這篇資料的,可惜連結似乎已死)



  2017/6/5更新:

  距離分享這個實作也已經快要兩年了,回頭一看,馬上就能看出這個程式寫得實在不好,但沒想到這居然是我小屋裡,點閱率最高的文章,而且還每天都在上升?!

  有鑑於此,我還是得提醒一下各位朋友。這篇的演算法可以參考,實作方式也可以參考,但盡量不要直接使用。

  C#是基於「類別(Class)」的程式語言,也就是我們常說的「物件導向程式(OOP)」,但由於我當初剛學Unity時,最熟的語言是C,C是基於「函式(Function)」的程式語言,兩者在撰寫習慣上大不相同。

  簡言之,在寫C#的時候,千萬不要模仿本篇的寫法啊XD。如果有時間的話,我會再把這個東西重寫一次,相信看起來會更好。

  不過,相信能理解這套演算法的人,一定也能自己重新實作一次。祝各位學習愉快!



  2022/06/03更新:

  大家好,我已經搬家到自架網站築夢角落了,Unity範例包的下載連結、以及程式演算法的說明,請到【實作】以Unity實現SRPG的棋盤式移動觀看唷!謝謝!


10

10

LINE 分享

相關創作

台灣獨立遊戲《人造機械之翼》參展CooMIC²,體驗JRPG風格的浪漫飛行冒險

20240427 遊戲進度:程式優化

[紀錄]將Unity製作的APP上架至Meta的Quest商城

留言

開啟 APP

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

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