Unity C# 網路連線Command廣播
- 此篇重點語法 * * * * *
→ [Command]
void CmdDemo(){
}
e.g[Command]←宣告一個廣播函式
廣播函式void CmdDemo(){
↑ ↑
↑前面一定要加Cmd,後面可以自己取。
}
- 用法
→ 當Client呼叫這個Cmd函式時Client端會在「Server端上的自己」執行這個函式的內容,但是其他client端不會同步執行這個函式(注意!這個方法只會在「Server端上的自己」執行所以本地端的client並不會執行這個函式,所以我們會需要使用其他方法去同步本地端的行為)。
- 此篇效果* * * *
- 大概了解重點後,接下來進入完整教學 -
一、 延續上一篇,我們已經可以做到讓Server端的狀態同步至Client端了,這次我們要做的是把Client端的狀態給同步到Server端上!首先我們先用下列的程式碼取代上次的RemoteEvent程式碼。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//使用UnityEngine.Networking的API
using UnityEngine.Networking;
//把這個類別改成網路行為才可以使用UnityEngine.Networking的API
public class RemoteEvent : NetworkBehaviour {
void Update () {
//判斷是不是本地端的玩家
if (isLocalPlayer)
{
//如果按下空白鍵可以觸發事件
if (Input.GetKey(KeyCode.Space)) {
//Server端利用RPC方式進行同步
if (isServer)
{
Debug.Log("Server");
//呼叫且執行網路呼叫函式,讓client端上的自己也執行網路呼叫函式中的內容
RpcShowCube();
}
//Client端利用Commanad端進行同步
if(isClient && !isServer)
{
Debug.Log("Client");
CmdShowCube();
}
}
}
}
//宣告這個函式為Server-Client的網路呼叫函式(在本地端也會執行)
[ClientRpc]
void RpcShowCube()
{
//抓取自身第一個子物件(Cube)並將其設定為Active狀態,這樣我們就可以看到Cube了
this.transform.GetChild(0).gameObject.SetActive(true);
}
//宣告這個函式為Client-Server的網路呼叫函式(但不在本地端執行)
[Command]
void CmdShowCube()
{
//抓取自身第一個子物件(Cube)並將其設定為Active狀態,這樣我們就可以看到Cube了
this.transform.GetChild(0).gameObject.SetActive(true);
}
}
二、 當我們新增完同步後我們把專案匯出並寫進行功能測試我們會發現如果在Client按下空白鍵,Server端上的Client角色頭頂會出現紅色方塊,但是Client端本身並沒有任何的改變。
三、我們透過了[Command]讓Client端的事件可以同步到Server上,但是因為 [Command]不會在本地端執行,所以接下來我們要讓本地端也能夠執行事件,我們繼續打開RemoteEvent程式碼,並在[Command ]函式中新增一行程式碼。
四、接下來我們匯出專案,並且逕行連線測試,我們會發線這次當我們在Client端按下空白鍵之後,Client端的頭上也會出現紅色方塊囉!這樣就完整的在網路上同步了一個事件!
五、透過這五篇教學我們學到了如何建立連線、同步玩家座標動畫以及網路事件,接下來就看個位如何把這些技巧應用在自己的網路遊戲中囉!
- 複習重點語法 * * * * *
→ [Command]
void CmdDemo(){
}
e.g[Command]←宣告一個廣播函式
廣播函式void CmdDemo(){
↑ ↑
↑前面一定要加Cmd,後面可以自己取。
}
上一篇《UnityC#網路連線RPC廣播)》
-------------------------------------------------------------------------------------------------------------------------------------
我們有粉絲專頁囉!!!
如果怕有問題連絡不到我們,歡迎隨時私訊FB粉專哦!!!
https://www.facebook.com/Straying2018/
● 如果這篇文章有幫助到您,希望您能留言給予我們鼓勵 !
● 對於文章有任何的建議,非常歡迎留言告訴我們哦 !!!
● 有任何想知道的功能也歡迎告訴我們,我們會盡快寫成部落格分享給大家!
- By Alex -