搞笑的事情,認真去做,我覺得這就是 Kuso 的精神。
連線部分小有進展,先來報報喜。
心動不如馬上來實作,所以這次選用的連線插件是
Photon。
連結是官網,但好好去逛一下,其實應該還是一頭霧水,
網路上的教學也不少,我找到一篇還不錯,基本上也是照著上面做的。
所以看完官網後,若想體驗,其實真正有用的連結應該是~~~
Unity asset store 上的這個
Pun2!!
看過官網介紹應該就知道,它其實因應遊戲的規模的玩法,
有不同的連線服務可以使用,而 Pun 這個是有所限制的免費服務。
限制在哪呢?我照著步驟去申請了一個 photon cloud,
並新增一個自己的專案名稱,就能得到一個 App id,
下面是後臺統計資料。
這個 CCU,即是 Concurrent User 的縮寫,亦指同時在線玩家數;
因為我有在自己測,所以會有 2 個,這是正常的。
而免費服務的限制就是,最高只能允許 20 人在線,
另外傳遞的資料大小也有限制,若是同步的資料很複雜又龐大,可能就會超出免費提供的大小,
當達到限制時,服務就會暫停,遊戲內的玩家就會斷線。
=> 在這個情況下,應該還是綽綽有餘讓我拿這個專案練習啦XD
它的連線模式是,房間制的,每一個遊戲本體都能擔任主機或者客戶端,
真的實際接觸了才發現,比我之前存的幾個插件跟 3、4 年前的技術都還方便,
由於平常的刷新,就是交由主機那邊處理大部分的邏輯,
所以我稍微針對我原本的單例,加了很~多判斷去做分工,
做完這些前置作業後,就可以來使用它神奇的地方。
Photon 是怎麼去做到兩端的溝通的??
我的認知跟自己實驗的結果如圖顯示。
它會需要一個 Photon View 當媒介,去監聽場景中所有繼承 IPunObservable 的物件,
並將需要同步的資訊,利用 OnPhotonSerializeView 去同步給 Client。
但光靠這樣並不足以讓所有玩家的資訊都一致,也是會有需求是客戶端自己操作的指令,
需要上達給主機知道的,或者想同步給其他客戶端,這時候就要靠 RPC。
使用方式就是在那個方法用標籤就可以了。
接著在同步的那個時機點呼叫,寫法有點像 invoke,是丟方法字串作參數。
RPC 對象有很多種,可以只發主機、除了自己外的其他人、或全部都收得到......等。
我在測試的時候還是有幾個有點奇怪,可能是我自己的遊戲邏輯有問題,
但至少如圖顯示,RPC 應是雙向的無誤。
如此一來,就能先實作連線選角的部分,來測試看看。
先新增一個連線對戰模式,並有兩種方案:當主機的還是要當挑戰者。
當然選挑戰者也有防呆,就是目前 cloud 上沒有房間的情況下,那就交給你創建一個房間。
為了要截自己畫面,有開兩個遊戲測試的感覺,
用了另外一套錄影軟體,加上 Gif 想要壓得很小......結果解析度就慘不忍睹,請多見諒。
我之後會再改善,效果差不多如動圖所示。
真的跟趴趴鼠說的一樣,一臺電腦同個 ip 也能測,非常方便!
但是就是要補上很多防呆,跟連線異常返回地方的介面處理,
原本的流程瞬間複雜了一大塊,所以一直在修改跟微調。
下一部分就是實作角色的移動同步跟攻擊指令同步。
最後這篇寫得是稍微有點雜亂無章,請多包涵@@
另外有錯之處歡迎跟我說,我會馬上修改。
希望可以把這個插件也吸收成為一個新的武器,
加油>Q</