建議先看過上一篇網路連線的方式後再來看這篇文章,這篇會延續上一篇的內容
這篇文章會使用到RPCMode,關於這個東西的介紹可看這篇文章
RPC能傳遞的參數為以下七種:
- int
- float
- string
- NetworkPlayer
- NetworkViewID
- Vector3
- Quaternion
接下來的範例我將示範傳從Server傳送Vector3給Client...
請注意!文章中使用到的Network View必須要和傳遞參數的程式碼放在同個物件內!!!
一樣先從Server端開始
選擇Main Camera
按下Add Component,搜尋「Network View」並新增

再來就是撰寫程式碼了!
和上一篇不同的地方我會用紅色標註,相同的地方則不在寫註解
using UnityEngine;
using System.Collections;
public class ServerScript : MonoBehaviour
{
private int port = 8000;
public NetworkView netView;//必須先建立物件,才能使用RPC
private void OnGUI()
{
if (Network.peerType == NetworkPeerType.Disconnected)
{
if (GUI.Button(new Rect(100, 100, 100, 50), "Start Server") == true)
{
Network.InitializeServer(10, port, !Network.HavePublicAddress());
MasterServer.RegisterHost("AAA", "BBB", "CCC");
}
}
else
{
GUI.Label(new Rect(100, 150, 100, 50), "人數 = " + Network.connections.Length);
if (GUI.Button(new Rect(100, 100, 100, 50), "Stop Server") == true)
{
Network.Disconnect();
}
if (GUI.Button(new Rect(100, 50, 100, 50), "傳送") == true)
{
netView.RPC("Message", RPCMode.Others, new Vector3(5, 0, 0));//第一個參數為Client端要被呼叫的方法;第二個為由誰接收;第三個為要傳遞的參數
}
}
}
private void OnApplicationQuit()
{
Network.Disconnect();
}
[RPC]//這行一定要打!
private void Message(Vector3 vec)//將訊息傳送到伺服器端,由有著相同的名稱及參數的方法接收
{
Debug.Log("伺服器端傳過來的Vector3為:" + vec);
}
}
然後選擇Main Camera,並將帶有Network View腳本的物件(在這裡為Main Camera本身)拖曳到Net View內

再來換Client端...
接收端同樣要在Main Camera上新增Network View

開始撰寫程式碼!
和上一篇不同的地方我會用紅色標註,相同的地方則不在寫註解
using UnityEngine;
using System.Collections;
public class ClientScript : MonoBehaviour
{
void Awake()
{
MasterServer.ClearHostList();
MasterServer.RequestHostList("AAA");
}
private void OnGUI()
{
if (Network.peerType == NetworkPeerType.Disconnected)
{
if (GUI.Button(new Rect(100, 100, 100, 50), "Start"))
{
HostData[] data = MasterServer.PollHostList();
if (data.Length > 0)
{
Network.Connect(data[0].ip, data[0].port);
}
}
}
else
{
if (GUI.Button(new Rect(100, 100, 100, 50), "Stop Client"))
{
Network.Disconnect();
}
}
}
private void OnApplicationQuit()
{
Network.Disconnect();
}
[RPC]//這行一定要打!
private void Message(Vector3 vec)//接收伺服器端傳過來的參數
{
Debug.Log("伺服器端傳過來的Vector3為:" + vec);
}
}
好了之後連線,按下傳送按鈕,則可以在客戶端收到訊息!


請先 登入 以發表留言。