UNET連線遊戲(二){讓子彈飛一毀}

本篇使用的是5.3版後有UNET的UNITY
目標:基本連線遊戲機制+發射物體同步到其他玩者
1.延續前篇(UNET連線遊戲(一){FPS基本設置&重生點})

  • 首先製作一顆子彈
    unet-basic_game-010
    重新命名為Ammo,歸零參數將縮放調整為0.3
    unet-basic_game-011
  • 並新增一個名為Resources的資料夾,製作為Prefab放入資料夾後刪除場上物件
    unet-basic_game-012

  • 撰寫我們的槍枝(發射器)程式 GunController.cs

    參數宣告的部分
    power是準備賦予子彈的力道
    playerCamera是為了取得主角的攝影機視角(位置座標)
    重點在於[Command]標籤以及帶有Cmd字眼的function
    這是要給伺服器看的命令方法的命名潛規則
    此方法內除了一般的常用寫法,多了一條
    NetworkServer.Spawn (instance);
    專為網路用戶準備的動態生成功能(基於Network架構下)
  • 幫我們的PLAYER掛上這支程式,執行專案就可以看到滑鼠左鍵可以打出物件,但還不會移動。
    unet-basic_game-013
    *所以才可以拍出這麼高難度的照片。
  • 幫我們的Ammo掛上Rigidbody賦予物理現象
    unet-basic_game-014
  • 若希望子彈可以一段時間後消失,我們需要另隻程式加到子彈上 AmmoController.cs

    透過[ServerCallback]下的Update () 檢查是否大於最大生存時間,並將其刪除

2.網路同步

  • 執行遊戲HOST球可以正常打出也會消失,一切都完美了!?
    unet-basic_game-015
    連線測試一下,發現Host可以看到Client打出的子彈,Client端反而看不到
    *原因是這樣:
    這個子彈是交由SERVER處理生成的,變成只有開房的Host才可以看到這個物件,Client反而看不到由自己下達指令,請SERVER生出的物件
  • 解決方案:
    到我們的NetworkManager找到RegisteredSpawnable Prefab點下+號新增一個欄位並且把Ammo放入,把這個預製物件註冊
    unet-basic_game-016
  • 而且記得再子彈上加入Network>NetworkTransform 用來同步位移資訊
    *詳細步驟請見(UNET基礎介紹)

下期預告:UNET連線遊戲(三){廝殺吧!!吃下我的子彈}

Leave a Reply