1.按鈕功能製作
2.數字面板同步更新的方式
前言:
unity在5.x以後使用了的新的網路連線方法,簡稱UNet
為了解說方便,製作一個遊戲名叫 搶奪20 / Rob20 的連線小遊戲
規則:
兩個人輪流喊1~2個數字,先搶到20的人勝利
看此篇前建議先看前面的篇章喔
連線小遊戲製作part1
連線小遊戲製作part2
連線小遊戲製作part3
首先本篇開始前要釐清幾個事情
GM.cs主要在Server上負責處理遊戲邏輯與Client端的控制
Player.cs主要是把玩家做的事情告訴GM.cs,然後把GM.cs的訊息回傳到玩家的畫面上
接下來會用到幾個很重要的語法
[SyncVar] | 把Server端的參數同步到Client |
[Command] | 被標記的方法在Client被呼叫,Server上執行 |
[ClientRpc] | 被標記的方法在Server被呼叫,Client上執行 |
isServer | 執行環境是否為Server |
isClient | 執行環境是否為Client |
isLoaclPlayer | 執行環境是否是本機玩家 |
接下來的講解將會大量的用到這幾個語法~
伺服器端
首先呢在GM.cs增加這幾行
public int Mumber = 0;
public void AddMunber(int addMun)
{
Mumber += addMun;
}
解說:
Mumber 就是目前的數字~搶到20就贏了
AddMunber()要接收一個參數,然後會把數字與參數相加
玩家端
在Player.cs 增加這幾行
public Button btnAddOne;
public Button btnAddTwo;
public Text txtMunber;
void Start()
{
if (isLocalPlayer)
{
txtMunber = GameObject.Find("txtMunber").GetComponent<Text>();
btnAddOne = GameObject.Find("btn1").GetComponent<Button>();
btnAddTwo = GameObject.Find("btn2").GetComponent<Button>();
btnAddOne.onClick.AddListener(() => CmdAddMunbers(1));
btnAddTwo.onClick.AddListener(() => CmdAddMunbers(2));
}
}
[SyncVar]
public int Munber;
[Command]
public void CmdAddMunbers(int addMun)
{
gm.AddMunber(addMun);
}
void Update()
{
if (isServer)
Munber = gm.Mumber;
if (isLocalPlayer)
txtMunber.text = Munber.ToString();
}
解說:
0.還記的[Command]的意思嗎,在Client呼叫的方法實際會在Server端執行
1.Start()會抓到所有的物件實體
2.onClick.AddListener()會把場景上的按鈕的onClicke事件與CmdAddMunbers()方法綁定~
3.按鈕按下後會觸發CmdAddMunbers(),並在Server端上的Player.cs執行
4.GM.cs會把數字往上加
5.再藉由 Update()部分裡的Munber = gm.Mumber;把數字抓回Server端的Player.cs
6.[SyncVar]public int Munber;會同步Server端與Client端的Munber這個變數
7.再藉由 Update()部分裡的txtMunber.text = Munber.ToString();顯示在Canvas上
編譯成exe檔測試看看吧~
開兩個遊戲視窗,並且每個按鈕都點點看
數字會隨著按鈕+1或+2跟著往上加
兩方的數字同步顯示囉~
這篇先寫到這邊
下一篇會講只要是遊戲製作一定都會有的流程控制~
感謝看到這邊的你!!
沒有留言:
張貼留言