建議先看過上一篇網路連線的方式後再來看這篇文章,這篇會延續上一篇的內容
這篇文章會使用到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);
}
}
好了之後連線,按下傳送按鈕,則可以在客戶端收到訊息!

你好我碰unity自學已經半年了 最近開始要接觸網路部份,看到網路上很多人都使用 "RPC" 這個關鍵字,可是發現她好像是今年才跟使不支援,甚至上去官方網站已棄用請使用new Multiplayer Networking system, 可是目前網路上大部分文章 都是使用 "RPC" 這個方法,所以我面對網路部分該怎麼學習比較好 可以給我方向嗎? (因為英文不好本人學習方法都是程式碼複製下來有中文解釋學起來 沒有就只能print 或者 刪減 看結果是什麼慢慢學習)
https://www.youtube.com/watch?v=PI_Nfg9mQRw 雖然是英文,但他示範的很詳細,聽不懂英文也能了解。(由於最近忙著碩士考試,無法將此影片另外做為中文教學,非常抱歉)
你好 我們要做的是語音助理 語音轉文字後的文字要傳去伺服器端做回應 請問要如果是傳文字過去伺服器端呢?
private void Message(Vector3 vec) 將傳入的參數改為字串就可以了
netView.RPC("Message", RPCMode.Others, new Vector3(5, 0, 0));//第一個參數為Client端要被呼叫的方法;第二個為由誰接收;第三個為要傳遞的參數 是new Vector3(5, 0, 0)這邊要改成字串嗎?
private void Message(Vector3 vec) new Vector3(5, 0, 0) 這兩個都要改
不好意思我們是有要傳到一段網址上面的那請問要如何做修改呢? 就是那翻譯出來的文字要直接傳到http://150.XXX.XXX 這類的網址 謝謝你 我們的語音助理是語音轉文字後的文字要傳去伺服器端做回應 然後之後還要把相符合的答案傳回前端做回應
1. 修改CODE上面的IP和Port,改成Server端的資訊 Server要開啟相同的Port,等著接收Client資料 如果看不懂,請先去看一下Socket的傳輸方式 2. 改用Socket和php/js做Get/Post
嗨~親愛的部落客與同好夥伴們,看到大家在部落格中互動留言,真是太開心啦~ 痞客邦有個追新留言小祕技tip要偷偷告訴你喲! 只要運用簡單的小撇步,在喜愛的部落格文章中,按下【+關注】按鈕,就能在自己的興趣牆上快速追蹤各種最新動態,即時和部落客與同好夥伴們留言互動,還能探索發掘更多你可能喜歡的興趣社群新鮮事喔! >>去看看怎麼運用【+關注】https://goo.gl/xfxB4o 也歡迎大家多多關注痞客邦官方帳號,獲得更多新消息! >>去關注【痞客邦】https://goo.gl/2sEzuL >>去關注【PIXstyleMe】https://goo.gl/PBGd69