創作內容

8 GP

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

作者:冷宮先生│2015-08-19 16:34:39│贊助:16│人氣:4623


  大家好,我是冷宮先生!今天要發一個和小說完全無關的東西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啊、解說錯誤啊、或者你覺得怎麼寫更好),都歡迎在底下留言,或是寄站內信討論。

  要是你沒有巴哈帳號的話,也可以mail給我:aa41807@gmail.com

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


  參考資料:SLG遊戲之路徑尋找 (我當初是參考這篇資料的)




  2017/6/5更新:

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

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

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

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

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



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

相關創作

同標籤作品搜尋:Unity|RPG|SLG|SRPG|路徑|演算法

留言共 10 篇留言

moNo
啊...請問這個完成了嗎@@?

01-02 16:51

冷宮先生
之後有因為別人的委託而稍微往下做了一點
但是最終是沒有完成的@@
你是打算要做棋盤式RPG嗎??01-02 17:53
moNo
我想試試看 不知道這個教學有沒有完整版?

01-02 21:15

冷宮先生
完整是要到多完整@@?
我放在這裡分享的檔案只有「移動」功能
而這個功能本身是完整的01-02 21:24
moNo
好的感謝你 我再找其他的教學XD

01-02 21:43

冷宮先生
不客氣XD
有機會的話可以交流一下01-02 23:49
邦邦
你好~ 我照你的案例自己做了一遍,雖然方法不太一樣但到目前算出可走的格子都成功了,有些不太明白的問題想問您方便ㄇ~

07-13 22:43

冷宮先生
可以唷,歡迎交流[e1]07-15 10:23
雪灬憐月
好棒啊,我final year project就打算做戰棋遊戲,這篇文章的邏輯啟發很大,謝謝

09-04 11:29

冷宮先生
不客氣唷~
很高興有幫助到你[e1]09-04 21:19
衝擊君
請問冷宮大大在製作時的unity版本是多少呢?
我的unity開起來但很多功能都變了,按下play並沒有預期的反應
所以想載適合的版本來開~

09-19 17:19

冷宮先生
當時用的是Unity4.2及4.3
不過我最近試過把它從雲端載下來
用Unity5.6是能正常使用的

大部份的API如果有改過,Unity會提醒,問使用者要不要自動修改
少數無法自動修改的,手動改應該也不成問題
我記得我用的5.6打開的時候
大部份都有轉換成功
失敗的部份是材質球的API好像換過,也無法自動轉換
但是照著Unity的提示訊息修改就能用了

希望有幫助到你~09-19 20:49
海月
謝分享只是找不到移動的button設定在哪==...

11-22 17:47

海月
因為想參照移動的button來增加其他button並且讓其在角色移動時也會跟著角色移動

11-22 17:49

冷宮先生
在Path.cs裡,第69行:GUI.Button11-22 21:29
海月
話說移動速度的碼是不是有問題?不管改多少它的速度還是沒變

11-23 15:06

冷宮先生
這部份沒什麼印象了,當時應該是有效的
也許是unity有改過相關的API
你可以參考PlayerController.cs的77行、79行
修改79行的常數項是有用的
要怎麼修改程式可以視你的需求而定11-23 21:17
梯太
不錯!丟你GP
覺得連結裡的說明文件很有意思,也比較實用,可以直接整篇分享上來XD

11-07 12:54

冷宮先生
感謝賞識XD((好像回覆得有點晚啊[e11]12-13 21:43
我要留言提醒:您尚未登入,請先登入再留言

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

前一篇:【冷宮心得】《NO GA... 後一篇:《非常偵探社5》第三章 ...

追蹤私訊

作品資料夾

SiMon2567大家
我想要叫 大聲 拚一個輸贏看更多我要大聲說昨天18:10


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

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