1. 新建一個3D工程,在菜單 "File" - "Save Scenes" ,保存場景為 "Main"。注意,保存的文件放在Assets目錄下。
2.菜單"GameObject" -- "Create Empty",新建一個GameObject,右鍵重命名為 "NetworkManager"。
3.在Hierarchy面板,選擇NetworkManager。然后,在Inspector面板,點擊 "Add Component" 按鈕,搜索添加兩個組件:NetworkManager 和 NetworkManagerHUD。
NetworkManager組件管理游戲的網絡狀態。
NetworkManagerHUD組件與NetworkManager一起工作,並提供了一個簡單的用戶界面來控制游戲運行時游戲的網絡狀態。
4.菜單 "GameObject" - "3D Object" ,新建兩個物體: "Cube" 和 "Capsule" 。在 "Hierarchy" 面板,拖拽 "Cube" 到 "Capsule" ,Capsule 為Cube的父組件。分別重命名Capsule 和 Cube為 "Player" 和 "Visor"。此物體,作為一個游戲角色的代替品。
5.在Hierarchy面板,選擇Visor。然后,在Inspector面板的Transform選項卡,更改兩個屬性:Position和Scale。
- Set the Visor GameObject’s Scale to (0.95, 0.25, 0.5).
- Set the Visor GameObject’s Position to: (0.0, 0.5, 0.24)
6. 為了讓Player更生動的模仿一個游戲角色,需要改變Visor的顏色。在Project面板,右鍵 "Create" -- "Material",新建一個Material對象,並命名為"Black"。選中"Black"對象,在Inspector面板的Main Maps里面,更改Albedo的顏色為黑色。 拖拽Material到Hierarchy面板的Visor對象上面。
7.給網絡中的游戲角色一張身份證。選擇Hierarchy面板的Player,然后,選擇菜單 "Component" -- "NetworkManager" -- "NetworkIdentity"。接着,在Inspector面板,選擇Network Identity中的 "Local Player Authority"。這樣可以允許客戶端控制Player的行為。
8.拉拽Hierarchy面板中的Player對象到Project面板中,此時,生成一個Player的預制對象,暫且叫Player預制件。然后,可以刪除Hierarchy面板中的Player對象了。
9.保存一下。
10.選中Hierarchy面板的NetworkManager對象,展開Inspector面板的Spawn Info選項,有一個Platyer Prefab。拖拽Assets的Player預制件到Player Prefab中。(官網的意思:應該是很多的游戲都是只有的一個游戲主角由玩家控制,所以,在客戶端連接到服務器的時候,這里會生成一個對應的游戲對象,方便管理。
11.Assets面板,新建一個player目錄,右鍵該目錄 "Create" -- "C# Script" ,命名新文件為 "PlayerController",打開,復制下面的代碼到該文件。用此腳本控制游戲角色的行為。

1 using UnityEngine; 2 3 public class PlayerController : MonoBehaviour 4 { 5 void Update() 6 { 7 var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f; 8 var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; 9 10 transform.Rotate(0, x, 0); 11 transform.Translate(0, 0, z); 12 } 13 }
By default, Input.GetAxis(“Horizontal”) and Input.GetAxis(“Vertical”) allow the player to use the WASD and arrow keys, a controller pad or other device to move the player. For more information, please see the page on the Input Manager。
12.選中Hierarchy面板的NetworkManager對象,拖拽新建的腳本到Inspector的底下的 "Add Component" 按鈕上。
13.返回Unity,保存Scene。
14.點擊上方三角形運行按鈕。運行后,點擊 "LAN Host(H)" ,之后可以按 "AWSD" ,或者箭頭按鍵,控制物體移動。
15. LAN Host(H) : Client和Server一起運行
LAN Client(C) :只有Client的模式
LAN Server : 只有Server模式。
16.在一個獨立的窗口運行該程序。"File" - "Building Settings ..."
彈出窗口保存可執行文件
17.現在有兩個可以運行的程序,一個是Unity模擬器,一個運行的獨立窗口,可以自己選擇哪個作為服務器,哪個作為客戶端了。
18.為了同步不同客戶端的對象,更改 "PlayerController" 腳本。 腳本編輯后,代碼如下:

1 using UnityEngine; 2 using UnityEngine.Networking; 3 4 public class PlayerController : NetworkBehaviour 5 { 6 void Update() 7 { 8 // 只處理本地對象 9 if (!isLocalPlayer) { 10 return; 11 } 12 var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f; 13 var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; 14 15 transform.Rotate(0, x, 0); 16 transform.Translate(0, 0, z); 17 } 18 }
PlayerController對象不再繼承MonoBehaviour,而是繼承NetworkBehaviour,跟網絡打交道的腳本都是要繼承這個類的。
增加了using UnityEngine.Networking命名空間;
update函數里面,增加是否是本地對象的判斷。
保存后,關閉。
19.選中Assets中的Player預制件,菜單 "File" -- "Component" -- "Network" -- "NetworkTransform" ,這樣,就可以同步多個客戶端的行為了。