︿
TOP
X-BOT WAR 人物同步教程與開發實例
6/24/2018 8:59:48 AM
瀏覽數:3277
前言:
此文章除了可以讓玩家了解如何開發線上同步射擊遊戲外,還有一個完整的檔案可以供玩家下載使用,在學習前,我們來看看此款遊戲的介紹。
遊戲介紹:
X-BOT WAR
是一款已經在Google Play 上架的遊戲,其內容為一款機器人即時大亂鬥競技遊戲,玩家可選擇 X-88 或 X-99 不同型號的機器人來加入戰鬥。玩家必須在120分鐘內打爆對手,取得最多的擊殺數。
是一款已經在Google Play 上架的遊戲,其內容為一款機器人即時大亂鬥競技遊戲,玩家可選擇 X-88 或 X-99 不同型號的機器人來加入戰鬥。玩家必須在120分鐘內打爆對手,取得最多的擊殺數。
此完整遊戲可到以下網站進行下載:
Android:
https://play.google.com/store/apps/details?id=com.playndora.xbotwar
IOS:
https://itunes.apple.com/us/app/x-bot-war/id879399563
Android:
https://play.google.com/store/apps/details?id=com.playndora.xbotwar
IOS:
https://itunes.apple.com/us/app/x-bot-war/id879399563
遊戲示意圖:
下一頁我們開始討論我們要怎麼開發此專案。
開發教程
此專案使用了 Dp 與 Client 的方式進行遊戲。
GUID 設定
arcalet 使用了 GUID (金鑰)來使 client 與 服務器做連接,以下爲 本專案使用 guid 位置。
Client 端 GUID 設定
目標檔案: \Assets\Scripts\AGCC\AGCC_Options.cs
Dp 端 GUID設定
目標檔案:\AGCC\DPLogin.cs
在設定guid之前 我需要到 arcalet 後台創建新的專案才能有新的 guid
請讀者依照本專案需要的guid自行到後台創建。( 若沒有賬號需要新建新的賬號)
arcalet 開發平臺:
http://developer.arcalet.com/
Client 端 GUID 設定
目標檔案: \Assets\Scripts\AGCC\AGCC_Options.cs
- Gguid
- Sguid
- Certificate
- Iguid_sys Server資訊
- Iguid_app 版本控制
- Iguid_pr 玩家資料
- Lguid_medal 排行榜
Dp 端 GUID設定
目標檔案:\AGCC\DPLogin.cs
- Gguid
- Sguid
- Certificate
- Iguid_sv Server資訊
- Iguid_prinfo 玩家資料
- Iguid_medal 排行榜
在設定guid之前 我需要到 arcalet 後台創建新的專案才能有新的 guid
請讀者依照本專案需要的guid自行到後台創建。( 若沒有賬號需要新建新的賬號)
arcalet 開發平臺:
http://developer.arcalet.com/
Item 設定 (請新增一個新的 物品 並 需要有相同的 屬性)
1. Xbot Server
1. Xbot Server
- PassGate 控制是否讓玩家連接遊戲
- OfficialURL 官網鏈接
- ChannelA~C 提供不同的Channel (poid)供開發者方便管理(如正式版使用ChannelA 連接而測試版則使用ChannelB 連接)
- ChannelTest 除了以上2個方法 還提供了只供開發者自行連接的Channel
2. App Version Control 版本控制 (此範例使用Android,但也可通用IOS平台)
- Ver 最小版本號(可更新但不需要強制更新)/強制最小版本號(client 版本號 小於此數值 則強制更新)
- Market App下載首頁
- Ad_PIC1~3 提示/廣告視窗的圖片
- Ad_URL1~3 提示/廣告視窗的鏈接
3. PlayerInfo 玩家資料
- gold 金幣
- medal 獎章
- robot 選擇的機器人類型
- upgrade 升級程度 (0-7)
- tag_dayGift 每日獎勵
- tag_eventGift 活動獎勵
設定需要的 物品 後 ,我們接下來設定場景與排行榜。
Scene 場景設定
這個專案因為使用了配對與動態場景的關係,所以需要另外創建一個新的動態場景,這樣就能讓玩家配對到各場景遊玩。
Ps:雖然遊戲內只供4個玩家配對,但不要忘了因為房間是由dp創建進入了才讓玩家配對進入,所以需要在人數限制調整為 4+1的人數。
這個專案因為使用了配對與動態場景的關係,所以需要另外創建一個新的動態場景,這樣就能讓玩家配對到各場景遊玩。
Ps:雖然遊戲內只供4個玩家配對,但不要忘了因為房間是由dp創建進入了才讓玩家配對進入,所以需要在人數限制調整為 4+1的人數。
Leaderboard 積分榜設定
此專案會針對擊殺分數作為指標來排行,並以每週的方式作為排行。另外在每週結束時,也會讓相應的玩家獲得獎勵。
此專案會針對擊殺分數作為指標來排行,並以每週的方式作為排行。另外在每週結束時,也會讓相應的玩家獲得獎勵。
以上我們就完成了 GUID的設定。接下來我們來看我們的遊戲是如何登錄遊戲。
登入 Client端:
登入流程
以下呈現的流程圖可以讓玩家更了解此遊戲的登入流程。
- client在登入的時候會檢測本機端是否存有帳號,如沒有則會自動創建一個新的帳號再登入遊戲。
- 登入後會先通過 GetItemClass 的方式獲取後台設定的 Server 環境設定。如此一來開發者就能通過後台即時更新各種資訊。如:Client版本號,廣告,專頁網站,伺服器連接地址等等。
- 完成讀取後再根據現有的 Server Channel 發送註冊訊息,並在 Dp 回傳訊息後讀取個人的 GetItemInstances。都讀取成功後才算完成整個遊戲登入流程。
以下呈現的流程圖可以讓玩家更了解此遊戲的登入流程。
登入流程圖
請從以下位置執行專案:
Assets\Scene\Login.scene
以上相關程式碼可以下列位置查看相關用法與寫法:
Assets\Scene\Login.scene
以上相關程式碼可以下列位置查看相關用法與寫法:
- Assets\Scripts\Login\LoginManager.cs LoadLogin()
- Assets\Scripts\AGCC\AGCC_Login.cs LoginGame()
- Assets\Scripts\AGCC\AGCC_Msg.cs PrivaMsgIn()
- Assets\Scripts\AGCC\ArcaletControl.cs
通訊指令
在 Dp 與 Client 端 通訊時,我們需要知道其相關與相同的指令才有辦法讓 Dp 與 Client 做通訊。
PS:
私人訊息
接收:
發送:
場景訊息
接收:
發送:
PS:
- 以下為 Client 端視角,dp則是反過來 (接受改為發送)
- 沒有dp開頭則為不通過dp處理的訊息
私人訊息
接收:
- dp_reg 註冊回复 (itemid/dailyGift/eventGift)
- dp_robot 設定robot成功
- dp_sid 配對場景的poid
- dp_add 已經配對成功的玩家
- dp_upgrade 升級成功
- dp_readyTime 配對剩餘時間
- dp_matchfail 配對失敗
- dp_quit dp關閉
發送:
- quit client退出
- reg client與dp主持
- match client請求配對
場景訊息
接收:
- dp_add dp通知配對新增新的玩家
- dp_remove dp通知配對刪除舊有的玩家
- dp_ready dp開始配對開始遊戲
- dp_info
- dp_leave dp通知有玩家離開
- dp_start dp通知client開始準備
- dp_play dp通知client開始遊戲
- move client移動點與角度
- fire fire發射點與角度
- dp_hit
- dp_kill
- respawn
- dp_gameover
發送:
- info
- respawn
- fire
- hit
- move
- enter
專案中,client端使用了一個 class 來做指令的轉換與整理。這樣做除了可以很自覺的知道哪裡使用了指令外,在傳輸時加密解密與轉換的過程能更加統一化。
相關程式碼可以在以下位置找到其相關使用方法:
Assets\Scripts\Command\DpCommand.cs
相關程式碼可以在以下位置找到其相關使用方法:
Assets\Scripts\Command\DpCommand.cs
系統架構
此專案有使用一些比較方便的系統,如提示視窗系統與主遊戲控制器等等,以下列出此專案使用的系統。
(根據場景需要用的系統會有所不同,其中全場景為就算從專案複製出來也能獨立運作,會自行生成或是全域Static物件)
全場景:
登入場景:
主大廳場景:
遊戲場景:
(根據場景需要用的系統會有所不同,其中全場景為就算從專案複製出來也能獨立運作,會自行生成或是全域Static物件)
全場景:
- Arcalet控制器
- 視窗提示
- 載入動畫
- UGUI 監聽事件與動畫
- 主聲音控制
- dpCommand
登入場景:
- 登錄管理控制器
- 登入狀態機
主大廳場景:
- 主大廳控制器
- 配對管理
遊戲場景:
- 主遊戲控制器
遊戲配對流程
配對流程:
配對部分是由 dp 預先創建好的房間,並等待需要配對的玩家,在收到玩家發出配對指令 match 後,再依照現有的房間讓玩家進入房間。
Client 部分的話,收到dp進入場景訊息 dp_sid ,並根據其 sid 與 suid 成功登入場景(若失敗達5次 則會進入重新連線狀態),並打開配對界面後,會先收到 私人訊息 dp_add 加入 自己或原本已經配對好的玩家 才會從 場景訊息 收到 dp_add 來要加入比較晚來配對的玩家 。當30秒倒數結束後就可以通過 dp 場景訊息 指令 進入遊戲。
配對部分是由 dp 預先創建好的房間,並等待需要配對的玩家,在收到玩家發出配對指令 match 後,再依照現有的房間讓玩家進入房間。
Client 部分的話,收到dp進入場景訊息 dp_sid ,並根據其 sid 與 suid 成功登入場景(若失敗達5次 則會進入重新連線狀態),並打開配對界面後,會先收到 私人訊息 dp_add 加入 自己或原本已經配對好的玩家 才會從 場景訊息 收到 dp_add 來要加入比較晚來配對的玩家 。當30秒倒數結束後就可以通過 dp 場景訊息 指令 進入遊戲。
配對流程圖:
人物同步部分
人物同步部分依據 移動 射擊 作為主要根據。
在這個專案中 移動 與 射擊 不通過dp去處理,這樣做的好處是因為 讓 client 與 client 連線的話 能節省dp處理的負擔,但 缺點是 若就算client 端傳輸的位置是錯誤的,那 其他的client 也會受到錯誤的位置。
角色生成:
遊戲剛開始時 dp 會根據排隊次序分配 4 個玩家的位置。角色死亡後Client 會發送 respawn 指令到場景訊息,並且同步復活在同一個出生點。
在這個專案中 移動 與 射擊 不通過dp去處理,這樣做的好處是因為 讓 client 與 client 連線的話 能節省dp處理的負擔,但 缺點是 若就算client 端傳輸的位置是錯誤的,那 其他的client 也會受到錯誤的位置。
角色生成:
遊戲剛開始時 dp 會根據排隊次序分配 4 個玩家的位置。角色死亡後Client 會發送 respawn 指令到場景訊息,並且同步復活在同一個出生點。
移動部分:
使用電腦端會自動隱藏虛擬控制器而使用鍵盤與滑鼠,手機端則會使用虛擬控制器來讓角色移動。
PS: 如還需要更詳細的解說,還請查看以下付費文章,了解更多使用方法。
http://www.skyxy.com/article/content.asp?id=39
使用電腦端會自動隱藏虛擬控制器而使用鍵盤與滑鼠,手機端則會使用虛擬控制器來讓角色移動。
- 本機發送:
- 遠端接收:
PS: 如還需要更詳細的解說,還請查看以下付費文章,了解更多使用方法。
http://www.skyxy.com/article/content.asp?id=39
射擊部分:
射擊部分不需要發送與接收延遲部分,因為子彈產生的位置已經是產生在預判位置後的機器人上,所以只需要知道角度即可。(不過產生位置還是需要再次判斷位置以做同步產生)
另外射擊有分 擊中 與 擊殺。
射擊部分不需要發送與接收延遲部分,因為子彈產生的位置已經是產生在預判位置後的機器人上,所以只需要知道角度即可。(不過產生位置還是需要再次判斷位置以做同步產生)
另外射擊有分 擊中 與 擊殺。
- 擊中只需讓 Client端 檢測子彈是否觸碰其他機器人,再把訊息傳到dp 讓dp 去做血量運算才回傳到場景中。
- 擊殺則只需在機器人血量少於0時,dp 傳送到 死亡指令到client端即可。(死亡時 client端 鎖定操控)
遊戲結算
遊戲右上角會有倒數計時設定。在遊戲開始時,dp也會記錄相關時間,並且進行倒數。
遊戲進行時,右手邊會有一個排行機制,讓玩家可以隨時查看自己的排行,或其他人的血量,擊殺與死亡數。
當時間結束後,dp 就會判斷每個人的擊殺數與死亡數,並根據當場排行給予金幣獎勵或減少玩家的金幣。
遊戲進行時,右手邊會有一個排行機制,讓玩家可以隨時查看自己的排行,或其他人的血量,擊殺與死亡數。
當時間結束後,dp 就會判斷每個人的擊殺數與死亡數,並根據當場排行給予金幣獎勵或減少玩家的金幣。
專案內使用插件
除了arcalet的插件外,此專案也使用了 如 dotween,與 unity purchase 等插件。
dotween 是一個能很便捷的製作動畫的插件。的相關用法可到 官方網站 查詢使用詳情,此專案通常利用dotween來製作ui 的動畫效果。
而 Unity Purchase 則是unity 在unity 5.2 後發布的內購插件(完全免費),此插件能很便捷的使用 個平台的內購,讓開發者不需要花費太多時間,就能在個平台使用內購功能。
dotween 是一個能很便捷的製作動畫的插件。的相關用法可到 官方網站 查詢使用詳情,此專案通常利用dotween來製作ui 的動畫效果。
而 Unity Purchase 則是unity 在unity 5.2 後發布的內購插件(完全免費),此插件能很便捷的使用 個平台的內購,讓開發者不需要花費太多時間,就能在個平台使用內購功能。
Dp 部分
GUID 設定:
在使用dp時 開發者只需要設定好 Form_Main.cs 裡面的 全部GUID 就可以使用 Dp 功能。
dp使用的賬號為超級開發者賬號,開發者需要到後台進行設定。詳情的設定請參考 arcalet 超級使用者 。
GUID 設定範例圖 :
在使用dp時 開發者只需要設定好 Form_Main.cs 裡面的 全部GUID 就可以使用 Dp 功能。
dp使用的賬號為超級開發者賬號,開發者需要到後台進行設定。詳情的設定請參考 arcalet 超級使用者 。
GUID 設定範例圖 :
超級使用者 設定範例圖 (函式位於 DPLogin.cs 裡) :
登入設定:
使用 VisualStudio 打開後(推薦2015版本),按下F5 即可執行 Debug 模式。
在跳出視窗後,我們選擇 "- select a superuser -" => 選擇 登入帳號 與 Channel => Login 即可完成登入。
Ps:State需要出現 600 才算是登入成功。
使用 VisualStudio 打開後(推薦2015版本),按下F5 即可執行 Debug 模式。
在跳出視窗後,我們選擇 "- select a superuser -" => 選擇 登入帳號 與 Channel => Login 即可完成登入。
Ps:State需要出現 600 才算是登入成功。
Dp出錯機制:
若 Dp 發生 Exception , 檔案會記錄在 C:/XBot/Log , 裡面會有詳細的 錯誤資料 共開發者閱讀。
(或開發者可自行定義 Log 的位置 , 程式碼位於 Form_Main.cs 裡 的 60 行)
以上就是本專案的使用技巧,更多內容還請開發者自行下載檔案測試,裡面會有詳細說明。
若 Dp 發生 Exception , 檔案會記錄在 C:/XBot/Log , 裡面會有詳細的 錯誤資料 共開發者閱讀。
(或開發者可自行定義 Log 的位置 , 程式碼位於 Form_Main.cs 裡 的 60 行)
以上就是本專案的使用技巧,更多內容還請開發者自行下載檔案測試,裡面會有詳細說明。
1
2
3
4
5
6
7
8
您也可能喜歡這些文章
留言給作者
不公開此留言
登入即可留言
讀者留言
載入更多留言
文章列表