建議先看過上一篇網路連線的方式後再來看這篇文章,這篇會延續上一篇的內容

這篇文章會使用到RPCMode,關於這個東西的介紹可看這篇文章

 

RPC能傳遞的參數為以下七種:

  1. int
  2. float
  3. string
  4. NetworkPlayer
  5. NetworkViewID
  6. Vector3
  7. 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);
    }
}


 

好了之後連線,按下傳送按鈕,則可以在客戶端收到訊息!

文章標籤
全站熱搜
創作者介紹
創作者 Yang 的頭像
Yang

Yang的部落格(轉貼文章請註記來源)

Yang 發表在 痞客邦 留言(7) 人氣(7,016)