2016年12月14日 星期三

[Unity教學] 2D連線小遊戲製作 Part.3

這篇會講解兩個部分

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跟著往上加
兩方的數字同步顯示囉~

這篇先寫到這邊

下一篇會講只要是遊戲製作一定都會有的流程控制~

感謝看到這邊的你!!

沒有留言:

張貼留言