目錄
大家好,我是Wilson。
在上個月(2022/04)的時候,Photon官方正式發布了他們的最新產品-Photon Fusion,這個新產品融合了前幾代PUN2、Bolt的特點,主打能用一套簡單的API實現3A級遊戲的連線品質,能做到像是PUBG、Apex、Fall Guys那樣大量的玩家數量,並保持極高的網路同步效能與極低的延遲。
看到這麼動人的特點,相信大家都會和我一樣,迫不及待的想用用看Fusion、想徹底的了解到底這黑科技是否可以成為我們開發連線遊戲的最佳選擇。
因此我用了整整一個月的時間,將官網上的文件、範例專案,以及官方Youtube上的介紹影片都研究個遍,並嘗試做出一個連線的FPS遊戲,最終也簡單做出點基本的功能。
這裡可以直接看最後的成品~
這個專案就用到一些Fusion基礎的功能,例如Input Authority、State Authority、RPC、Client Side Prediction(客戶端預測)、Lag Compensation(延遲補償)、Match Making API等等…
有興趣的朋友可以下載來玩玩看喔!(雖然我已經在努力的Debug了,但可能還是有很多哈哈,還請大家見諒),遊戲放在文章的最下面~
那麼這篇文章就也來分享一下我學習Fusion的心得吧!
Photon Fusion 介紹
最一開始還是要不免俗的簡單介紹一下Photon Fusion。
Fusion是Photon最新推出的旗艦產品,是專門為Unity打造的連線套件,相信大家對Photon一定不陌生,他們曾經的產品PUN2、Bolt是大多接觸Unity多人連線的人都會使用到的,主打簡單易用的API,以及免除自架伺服器的困難,對於獨立開發者或是小團隊來說絕對是個福音,也因此累積了大量的愛好者。
網路架構
而Fusion就是結合了PUN2、Bolt、Quantum(Photon最旗艦的產品,主要面向真正的電競遊戲開發者)等產品的特色,加上開發團隊深耕多年的網路知識的經驗的新產品,強調只需用一套API就可以輕鬆實現3種網路架構:
- Dedicated Server:獨立架設伺服器,所有玩家作為Client連進伺服器,優點就是安全級別最高,適合競技程度較高的遊戲。
- Client Hosted:由其中一名玩家扮演Server和Client的角色,其他玩家連進該玩家的電腦,優點就是可以節省架設伺服器成本
- Shared Mode:類似PUN2的架構,所有玩家都是經由Photon Cloud(Photon提供的雲端伺服器)來傳輸資料,優點就是非常好開發、方便,適合即時性較低的遊戲
這裡也是為甚麼Fusion比PUN2更加強大的地方之一,PUN2的連線都是經由Photon Cloud來傳輸資料,資料都是要先經過Photon Cloud才能到另外一個玩家那邊,傳輸效率理所當然的會很慢。
而Fuison的Dedicated Server/Client Hosted,則是先經由Photon Cloud配對好之後,直接讓所有的Client使用IP直連Server,所以效率非常的快(如果因為某些錯誤無法透過IP直連,Fusion就會改以Photon Cloud的方式傳輸資料)。
狀態同步的模式
再來就是Fuison也提供我們開發者兩種狀態同步的模式可以選擇:
- Delta Snapshots:只傳輸狀態的變化量,以減少資料傳輸量,適合需要更精準即時同步的5v5、10v10等遊戲。
- Eventual Consistency:只同步一定範圍內的所有物件,這個範圍稱為Area of Interest(感興趣的區域),適合大量玩家的RPG等遊戲
如此我們就可以根據自己的遊戲類型及需求,選擇適合的模式,而改變模式也只需要到Fusion的設定視窗設定就可以了,非常的簡單。
State Authority與Input Authority
我個人認為Fuison最特別的地方就是State Authority(改變狀態的權限)與Input Authority(提供輸入的權限)的部分了,Fuison的運作原理是,所有的Client擁有Input Authority來蒐集玩家的輸入並送到擁有State Authority的Server或Host,然後由State Authority來根據收到的輸入資料處理狀態,並把新的狀態送給所有Client。
因為Client只需要傳送資料量很小的輸入資料,就可以節省很多的傳輸時間,實現更快的同步。
Client Side Prediction
在這裡因為在Input Authority傳送輸入到State Authority,再到狀態資料傳送回來會需要一段間,如果這時玩家角色完全沒有任何動作,會讓玩家覺得為什麼明明有觸發卻沒有即時的回饋,因此Fusion的做法就是在Input Authority這裡做Client Side Prediction(客戶端預測),讓這段時間可以在本地端用上一個狀態自行模擬輸入後的下一個狀態,等到接受到狀態的資料再重新模擬正確的狀態。
Lag Compensation
也因為其實每台裝置實際上都不可能真正的在同一時間點上做到完全的同步,一定會出現Player A看到了Player B在某個地點,但其實Player B已經在其他地方,這個時候如果Player A對Player B發射子彈,就會出現明明瞄準到了卻沒有打到的情況,Lag Compensation(延遲補償)就是為了處理這種狀況出現的。
Fuison中要使用Lag Compensation,也是非常的簡單容易,只需要加裝幾個必要元件,並使用對應的API就可以給玩家們更順手的遊戲體驗了。
Tick Based
Fusion之所以可以精準地做到上面提到的所有功能,就是因為Fusion是使用Tick作為同步的單位。
傳統的連線方式都是以時間為單位,但因為每台裝置的時間都不一樣,因此同步的精度不高,為了解決這個問題,Fusion將所有的狀態資料,用Tick的方式更新,假設1秒設定60個Tick,1個Tick就是16.667毫秒,Fusion就會每16.667ms更新一次狀態,並同步給所有裝置,而所有的裝置也是以Tick為基礎改變或預測狀態。
如此一來,所有的裝置都會以相同的時間單位進行同步。
以上簡單介紹了Fuison的基本功能(如有說明錯誤的地方請麻煩再跟我說一下,感謝!),相信看完後大家一定可以理解為甚麼Fusion的同步效能會這麼強了,當然還有很多厲害的功能是我沒有提到的,感興趣的朋友可以多看看官方的完整介紹。
使用心得
接下來就來分享我這個月使用的感受~
老實說,從第一次使用開始,就可以很明顯感受到Fuison強大的同步效能,相比於PUN2真的是好上超級多,在網路條件良好的狀況下,基本上完全感受不到延遲,穩定性也是非常的好。
除了在遊玩的感受之外,Fusion其實最讓我印像深刻的就是最一開始學習的時候,因為以往使用PUN2或是MLAPI都是直接在本地端輸入、本地端改變狀態,再使用Network Transform的元件同步資訊,如果要做Client Side Prediction或是Lag Compensation都必須自己去手動寫出來模擬,但Fuison這裡通通都幫我們處理好了。
雖然是這樣講,但其實我在一開始學習的時候覺得蠻痛苦的,因為要把思維改成提供輸入,跟套用輸入的部分分開來寫,要去考慮哪些東西是需要將輸入傳到State Authority、哪些可以在本地處理、哪些需要用到RPC等等。
尤其一開始也不是很懂Fusion的運作機制,很容易遇到因為分不清楚要在哪裡改變位置,或是搞混Input Authority的模擬狀態(有Forward和Resimulation),就會出現角色出現不知明的抖動或是整個亂跳之類的意外,都是要一直去理解Fusion的運作邏輯,才能一一解決。
不過值得慶幸的是,HasInputAuthority、HasStateAuthority就跟之前的IsMasterClient、IsMine的用法很像,RPC的使用也是很輕鬆,Fusion也提供Network Property、Network Rigidbody、Network MechanimAnimator、Network Character Controller等元件幫助同步,省下很多麻煩的步驟。
那我自己一開始是先從Fusion 100開始學起,配合Photon Taiwan的介紹、官網的文件與範例專案研究,以及這個教學,前前後後大約花了兩週才大致理解Fusion在幹嘛,後面兩週則是嘗試開始寫這個FPS遊戲,一邊學習,一邊實作,才更加的了解Fusion。
總而言之,我認為學習Fusion是比PUN2再更困難一些,需要花多點時間去理解,但相對的能做的效果也是多很多,絕對是個值得的投資。
與PUN2的比較
相信大多有研究過連線遊戲的大家,一定都很熟悉PUN2,雖然上面也多少提到了一些,但這裡也還是稍微總結一下我覺得兩者之間比較明顯的差異。
連線方式
PUN2的資料必須透過Photon Cloud傳輸,因此效率必定會慢上許多。
而Fusion則是先透過Photon Cloud將玩家們配對到同個Room,之後再用IP直連的方式把所有的Client連到Server上,這樣就不用多經過一道傳輸的路徑了。
同步處理
PUN2都是在本地端接受輸入,並將輸入改變狀態,再將改變後的狀態同步給其他玩家,Fusion則是只傳送輸入,到State Authority才改變狀態,並發送給所有玩家。
PUN2需要手動寫出Client Side Prediction、Lag Compensation等功能才可以讓同步看起來稍微順暢,但Fusion都幫我們處理好這些問題,同步效果也遠比PUN2自己實作好很多。
學習成本
PUN2基本上是非常好學習的,因為已經是很成熟的產品,而且網路上的教學也是非常多,只要Server、Client邏輯弄清楚,就可以快速的上手。
Fusion雖然也是很好上手的套件,但因為提供的功能非常的多,加上有一些概念是跟其他網路連線方案不太一樣,因此會需要多花一點時間理解,也因為是比較新的產品,學習資源比較有限,好在官網都有完整的文檔與介紹,而且都有中文版的,所以不至於到太困難。
2022推薦什麼連線套件?
這是一篇介紹Photon Fusion的文章,所以當然會推薦Fusion啦哈哈,而且基本上大多的遊戲類型現在都可以使用Fusion同一套API做出來,所以現在如果想做連線遊戲,可以首先考慮Fusion。
不過其實市面上還有很多不錯的套件,像是Mirror、PUN2、Bolt、MLAPI(Netcode for Gameobjects)、Fish Networking等等…
但其實不管使用哪個套件,使用的邏輯都蠻類似的,大家應該根據自己的遊戲類型做選擇,對網路UDP、TCP那些很熟的朋友們甚至可以手寫自己的連線架構,也是有不少公司、團隊會這樣做的。
而Fusion也不是沒有缺點,他最大的缺點就是不管怎麼樣,他都是Photon的產品之一,所以當產品的人數到達一定上限之後,就必須付費。
但我個人認為,對於獨立開發者或是小團隊來說,這項服務還是最好的方案,畢竟架設與維護伺服器是一件非常不容易的課題,也很花時間,所以使用Photon的服務可以讓我們更專注在遊戲本體的開發與設計,不用過多的考慮這些問題,而Photon的收費也其實都還是在合理的範圍內,我認為還是相當值得的。
學習Fusion的資料
這裡我也幫大家整理了一些可以學習Fusion的資料,強烈推薦每個都要看看喔!
Happy Nerd
沒錯!我們也有一個介紹Fusion基礎功能的教學系列,歡迎大家可以參考看看喔!
【Unity教學】2022製作多人連線遊戲的最佳選擇!Photon Fusion 01 介紹及安裝
【Unity教學】2022製作多人連線遊戲的最佳選擇!Photon Fusion 02 建立連線
【Unity教學】2022製作多人連線遊戲的最佳選擇!Photon Fusion 03 角色移動
Photon Fusion官網
Fusion 100 這個系列大致介紹了Fusion的基本使用與安裝,也是最一開始學習時必看。
Photon Taiwan Youtube
這兩部影片一定要看熟,是關於Fusion的功能介紹以及運作原理!!
Photon Taiwan Medium
Fusion 1.0 正式版發佈及範例引導 這是Photon Taiwan官方整理給我們的學習資源,也是必看。
Photon 開發者的Youtube
這個頻道是一位開發Fusion的團隊成員的頻道,裡面有很多關於Fusion的運作原理解釋,因為會比較難一點點,有興趣的了解Fusion背後的原理可以再去看看。
總結
今天跟大家分享了我這一個月以來的使用心得以及我自己對於Fusion的理解,希望可以幫到也想學習的朋友,如果文章有什麼錯誤也歡迎指正,謝謝大家!
如果覺得我們的文章有幫助的話可以訂閱這個網站喔,我們會與您分享最新文章!
遊戲下載
操作
WASD前後左右、空白見跳躍、Shift衝刺、Ctrl慢走、
左鍵射擊、右鍵瞄準
B鍵開啟商店、R鍵換子彈、G鍵丟棄武器、1鍵裝備主武器、2鍵裝備副武器
Tab鍵顯示記分板、ESC鍵暫停
配對
創建房間時,房間名稱請輸入英文、最大玩家數可以2~20人,並可以選擇兩張地圖遊玩。
進入房間後,左下方可以輸入暱稱、右下方可以Ready,當所有玩家Ready後自動開始遊戲。
I like the helpful information you provide in your articles.
I’ll bookmark your weblog and check again here regularly.
I’m quite sure I’ll learn many new stuff right here!
Good luck for the next!
Thanks!
Thanks!!
谢谢分享~
顺便可以分享一下fps游戏的package吗,想要研究一下。
不會!之後會有FPS的教學,可以多多關注我們!