[譯]Unity – Networking Elements in Unity

原文:Networking Elements in Unity

Unity 網路所支援的東西都在上一個頁面討論了。Server 創建與 client 的連結、在 clients 之間共享資料、決定哪個玩家控制哪個物件以及支援各種穿透網路的配置變化。這個頁面將會引導你練習如何使用 Unity 的 network。

Creating a Server

在你開始開始玩網路遊戲之前,你要去決定要通訊的電腦。為此,你要先創建一個 server。這可以讓一個也在遊戲中的機器執行或是一個沒有參與遊戲的 server 專用機器。要創建 server,你只要從腳本簡單地呼叫 Network.InitializeServer()。當你是個 client 要去連結一個現有的 server 時,則改呼叫 Network.Connect()

一般來說,你會發現 Network class 這個會對你了解整個結構非常有用。

Communicating using Network Views

Network View 是一個在網路間傳送資料的 Component。Network View 讓你的 GameObject 獲得呼叫 PRC 或 State Synchronization 來傳送資料的能力。你使用哪種方式來使用 Network Views 會決定你遊戲的網路行為如何運作。Network Views 有幾個選項,但它們對你的網路遊戲來說是難以置信的重要。

更多使用 Network Views 的資訊,請參考 Network View Guide pageComponent Reference page

Remote Procedure Calls

Remote Procedure Calls (RPCs) 是在腳本中定義好的功能,它會連結到一個含有 Network View 的 GameObject 上。Network View 需要指向有包含 RPC 功方法的腳本。RPC 方法就可以被任何含有該 GameObject 的腳本呼叫。

更多關於 Unity 的 RPC 資訊,參考 RPC Details page

State Synchronization

State Synchronization 是一個不斷在遊戲中的 client 之間共享的資料。這樣可以讓一個玩家的位置同步到所有 clients 上,所以它看起來像是在本地控制,但實際上會分派到網路上。要同步一個 GameObject 的狀態,你只需在物件上加入 NetworkView 並告訴他需要被關注。被關注的資料就可以在遊戲內所有的 client 之間同步了。

更多在 Unity 中使用 State Synchronization 的資訊,參考 State Synchronization page

Network.Instantiate()

Network.Instantiate() 讓你簡單地產生一個 prefab 在所有的 clients 裡。本質上這就是呼叫一個 Instantiate(),但這會在所有 clients 中產生。

內部的 Network.Instantiate 是 buffered RPC 呼叫,它會在所有 clients 上執行(also locally)。它會分配一個 NetworkViewID 並配置到一個實例過的 prefab,它會確保它在所有的 clients 之間正確地同步。

更多的資訊請參考 Network Instantiate

NetworkLevelLoad()

處理共享資料、 client 玩家的狀態以及讀取 levels 可能有些複雜。Network Level Load 頁面有一個對於管理這個任務有幫助的範例。

Master Server

Master Server 會幫助你配對遊戲。當你創造一個 server 連結到 Master Server,然後它會給予一個所有運作中的 server 清單。

這個 Master Server 是讓 server 和 client 碰面的地方,在這裡 server 會被公告並讓 clients 可以連結到執行中的遊戲裡。這個可以讓所有的處理不用靠 IP 位址去搜尋。它也可以幫助使用者開場時不需要去處理它們的 router,在一般的環境下,這是需要的。它可以幫助 clients 繞過 server 的防火牆並取得平常無法被公開網路存取的私密位址。這些都是靠一個調解者"facilitates(調解)"幫助完成連結。

更多資訊請參考 Master Server page

Minimizing Bandwidth

使用最小限度的頻寬讓你的遊戲正確地執行是必要的。有不同的方法傳送資料,不同的技術決定什麼要何時要傳送以及其他的處置方式。

關於減少使用頻寬和技巧,請參考 Minimizing Bandwith page

Debugging Networked Games

Unity 有幾個功能可以幫助你的網路遊戲 debug。

  1. Network Manager 可以紀錄所有網路的收送狀況。
  2. 使用 Inspector 和 Hierarchy View 可以讓你追蹤物件的產生以及檢查 view id 等等。
  3. 你可以在同一個機器上執行兩個 Unity,並個別開啟不同的專案。在 Windows,只需執行其它 Unity 並透過專案精靈開起專案即可。在 Mac OS X 上,複數 Unity 實體可從 terminal 開啟,並附上 -projectPath 參數:

    /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath "/Users/MyUser/MyProjectFolder/"
        /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath "/Users/MyUser/MyOtherProjectFolder/"

確保你在 debug 時讓播放器在背景執行。例如,當你同時執行兩個實體,其中一個不會取得 foucs。這個會讓網路的 loop 崩壞並引起無法預期的結果。你可以啟用這個功能在編輯器底下 Edit->Project Settings->Player 裡面找到或是使用 Application.runInBackground

Page last updated: 2010-07-19 << 這是原文的更新時間

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s