2012年6月15日 星期五

[Unity script] Unity網絡基礎

剛讀到Unity的網絡系統,在這裡順便撰下一些筆記,做一些簡易翻譯工作,主要文件請參考:
http://unity3d.com/support/documentation/Components/net-HighLevelOverview.html

 在unity中,server可以按其功能和需求劃分為兩種,一種是Authoritative Server(掌權伺服器)和Non-Authoritative Server(非掌權伺服器)。

在掌權伺服器中,用戶如果想執行某些動作,需先發送一些請求,然後等待伺服器回應,並負責控制角色活動。換言之,動作並不在本地執行(the action will not be made logically)。譬喻,當作為玩家的我想移動角色時,我的螢幕並不會立刻顯示角色的移動,而是先發送請求到伺服器,告知他更新狀態(state),然後再由伺服器告知所有user(包括我在內),我的位置更新了。

這種伺服器的優點是可以使用戶有更高的實時性和同步性,但可能有延遲問題出現。且一旦斷開與伺服器的連接,會立刻當機。
 
在非掌權伺服器中,伺服器並不負責回饋用戶的輸入/控制其活動。相反,用戶在本地活動(the client act logically),然後才寄送結果到伺服器中,再傳送給其他用戶。

在Unity官方文件中,還提及兩種標準的networking method,網絡連接方法:Remote Procedure Calls(RPCs,這裡先譯作遠端程序請求)和State Synchronization(狀態同步)。

RPCS是指電腦透過server去呼叫其他電腦的程序,像是函數,物件的方法等等。這種方法適用於更新不頻密的動作,原因是,若不斷請求對方電腦呼叫程序,會造成一定負擔。
State Synchronization是指不斷分享一些需要頻密更新的數據,像是角色的坐標位置,血氣量等其它重要的角色資訊。

最後,Unity官方文件還提及幾點注意事項,包括要注意IP位址的性質,私用公用等等,若連接的電腦是使用私用IP位址,便需要使用NAT(network address translation)技術 -- 但大概unity已經幫我們完成了這項功夫,如果你想了解細節,請參考官方文件。暫時值得注意的是,建立實時遊戲時必需盡量減低頻寬(bandwidth),這將會是影響遊戲遊暢度的關鍵,在下幾章,我們將會更深入探討有關問題,並正式進入unity的網絡程式編寫。




沒有留言:

張貼留言