using UnityEngine; using System.Collections; public class server : MonoBehaviour { //端口號 int port =10000; //聊天信息 string Message = ""; //移動信息 string moveinfo = ""; //滾動視圖位置 Vector2 scrollPosition; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI() { GUI.skin.label.fontSize = 10; switch (Network.peerType) { //服務器未開啟狀態 case NetworkPeerType.Disconnected: StartServer(); break; //成功連接至服務器端 case NetworkPeerType.Server: Onserver(); break; case NetworkPeerType.Client: break; case NetworkPeerType.Connecting: break; } } void StartServer() { if (GUILayout.Button("創建本地服務器")) { NetworkConnectionError error = Network.InitializeServer(10, port, false); Debug.Log("連接狀態" + error); } } void Onserver() { GUILayout.Label("服務器創建完畢,等待客戶端連接....."); //得到客戶端連接的數量 int length = Network.connections.Length; for (int i = 0; i < length; i++) { GUILayout.Label("連接服務器客戶端id" + i); GUILayout.Label("連接服務器客戶端ip" + Network.connections[i].ipAddress); GUILayout.Label("連接服務器客戶端端口號" + Network.connections[i].port); } //斷開服務器 if (GUILayout.Button("斷開服務器")) { Network.Disconnect(); Message = ""; moveinfo = ""; } scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(200), GUILayout.Height(500)); GUILayout.Box(Message); //GUILayout.EndScrollView(); //顯示玩家移動信息 GUILayout.Box(moveinfo); GUILayout.EndScrollView(); } //接受消息 [RPC] void RequestMessage(string message, NetworkMessageInfo info) { Message += "\n" + "發送者" + info.sender + ":" + message; } [RPC] void RequestMove(string message, NetworkMessageInfo info) { moveinfo += "\n" + "移動人" + info.sender + ":執行了" + message + "移動事件"; } }
server 端
client 端
using UnityEngine; using System.Collections; public class client : MonoBehaviour { string IP = "172.16.120.149"; int port = 10000; string inputMessage = "請輸入信息:"; //接受到的信息 string Message = ""; Vector2 scrollPosition; //移動速度 float speed = 50.0f; float rotationSpeed = 100.0f; GameObject cube0 = null; GameObject cube1 = null; // Use this for initialization void Start () { cube0 = GameObject.Find("Cube0"); cube1 = GameObject.Find("Cube1"); } // Update is called once per frame void Update () { } void FixedUpdate() { if (Network.isClient) { float translation = Input.GetAxis("Vertical"); float rotation = Input.GetAxis("Horizontal"); if (translation == 1) networkView.RPC("RequestMove", RPCMode.All, "up"); if (translation == -1) networkView.RPC("RequestMove", RPCMode.All, "down"); if (rotation == -1) networkView.RPC("RequestMove", RPCMode.All, "right"); if (rotation == 1) networkView.RPC("RequestMove", RPCMode.All, "left"); } } void OnGUI() { switch (Network.peerType) { case NetworkPeerType.Disconnected: StartConnect(); break; case NetworkPeerType.Server: break; case NetworkPeerType.Client: OnClient(); break; case NetworkPeerType.Connecting: break; } } void StartConnect() { if (GUILayout.Button("加入遊戲")) { //客戶端開始嘗試連接服務器 NetworkConnectionError error = Network.Connect(IP, port); Debug.Log("連接狀態" + error); } } void OnClient() { //創建一個滾動視圖,用來顯示聊天信息 scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(200), GUILayout.Height(500)); //顯示聊天信息 GUILayout.Box(Message); //創建水平方向視圖 GUILayout.BeginHorizontal(); //編輯輸入內容 inputMessage = GUILayout.TextArea(inputMessage); //發送內容 if (GUILayout.Button("發送消息")) { //使用rpc發送內容 networkView.RPC("RequestMessage", RPCMode.All, inputMessage); } GUILayout.EndHorizontal(); //斷開連接 if (GUILayout.Button("斷開連接")) { Network.Disconnect(); Message = ""; } GUILayout.EndScrollView(); } //接受消息 [RPC] void RequestMessage(string message, NetworkMessageInfo info) { Message += "\n" + "發送者" + info.sender + ":" + message; } //接受模型移動消息 [RPC] void RequestMove(string message, NetworkMessageInfo info) { string sender = info.sender.ToString(); GameObject moveobject = null; //自己的移動事件 if (sender == "-1") { moveobject = cube0; } //其他玩家的移動事件 else { moveobject = cube1; } //根據消息判斷事件類型 int vertical = 0; int horizontal = 0; if (message == "up") { vertical = 1; } if (message == "down") { vertical = -1; } if (message == "left") horizontal = 1; if (message == "right") horizontal = -1; float translation = vertical * speed * Time.deltaTime; float rotation = horizontal * rotationSpeed * Time.deltaTime; moveobject.gameObject.transform.Translate(0, 0, translation); moveobject.gameObject.transform.Rotate(0, rotation, 0); } }
要点:需要给对象添加network view组件