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组件