Photon Engine 多人射擊遊戲製作 Part. 2本教學將以前面製作的多人連線為基礎,搭配 Toon Soldiers 資源製作玩家操作的遊戲角色。 先從 Asset Store / Package Manager 將 Toon Soldiers 與 Unity Particle Pack 匯入專案。
建立一個用於製作玩家角色的場景,開啟 [ Toon_Soldiers > ToonSoldiers_2 > ...... ] 資料夾。 將 ToonSoldiers_Infantry 預製物件拖曳到場景的原點位置,這是步兵角色預製物件與武器的結構。 這是機槍兵角色 ( ToonSoldiers_Infantry ) 預製物件與武器的結構。 從上面的 2 個預製物件可以發現,不同的角色只需要開啟不同的子物件,再換上不同的武器即可。 加入膠囊碰撞器與 Rigidbody 剛體元件,凍結旋轉。
加入士兵的動作,建立 Animator Controller 動作控制器。 開啟 Player Animator Controller 動畫控制器,加入待機、走路、跑步、射擊、投手榴彈…等動作。 開啟 [ ... > animation > Infantry ] 資料夾,可找到步兵 ( Infantry ) 的動作: Infantry_combat_idle 待機。 開啟 [ ... > animation > Infantry > root_motion ] 資料夾,收錄步兵 Root Motion 版本的走路、跑步、衝刺動作。 開啟 [ ... > animation > Infantry > movement ] 資料夾,收錄步兵 In Place 版本的走路、跑步、衝刺動作。
製作武器射擊功能先製作子彈,建立空物件並重新命名為 "Bullet",套用 Rigidbody 剛體元件。 建立一個 Bullet.cs 腳本,套用到 Bullet 物件,程式碼如下: 加上子彈的外觀,從 Hierarchy 選取 Bullet 新增一個膠囊子物件。 新增子彈的材質(例如 Bullet Material),套用到膠囊物件。 透過 Inspector 設定 Thrust(推力)變數的數值,將會影響飛行速度。 備註:變數的預設值 = 0 子彈不會向前移動。 按下 Play 測試遊戲,確認子彈的推力設定、飛行方向與飛行速度。 若子彈不需受重力往下掉,透過 Inspector 關閉 Rigidbody > Use Gravity 調整 Capsule 的旋轉角度與縮放比例,符合子彈的外觀。
製作子彈軌跡選取 Bullet 物件增加 Trail Renderer 元件,調整 Width 寬度~ 新增一個軌跡的材質,套用到 Trail Renderer > Materials > Element 0。 按下 Play 測試遊戲,確認子彈軌跡的效果。 套用 Photon View, Photon Rigidbody View 元件。 將 Bullet 拖曳到 Resources 製作預製物件。
製作武器射擊功能選取遊戲角色的武器,注意 ToonSoldiers 每個角色的武器都不同,透過 Hierarchy 視窗找到武器物件,在武器新增空物件並且命名為 "Muzzle" 槍口,調整位置與旋轉角度。
若是 ToonSoldiers_infantry 應該是 weapon_assault_rifle_A 物件。 透過 Hierarchy 選取武器,滑鼠右鍵 Create Empty 建立空的子物件。 將子物件重新命名為 "Muzzle" 用於標示槍口的位置。 修改 PlayerController.cs 腳本,加入以下程式碼: public GameObject bullet; 設定子彈的預製物件 public Transform muzzle; 設定槍口的位置
動畫控制器加入射擊動作、參數、過渡條件。 設定過渡條件:射擊與投擲手榴彈。 設定過渡條件:裝填彈藥、互動操作。
if (Input.GetButtonDown("Fire1")) 玩家按下射擊時動態生成子彈 void Update() ★ 注意!開槍射擊的程式碼不是放在原有的 void FixedUpdate() 裡面,否則開槍將會時有時無。
測試遊戲,子彈前進的方向如果不正確的話需要修正,將玩家角色的預製物件拖曳到一個場景, 選取 Muzzle 物件旋轉 Y = -90 後按下 Apply All 套回預製物件,刪除場景的子彈。 如果前面的操作步驟沒問題,子彈可以正常發射,將原本的子彈改為適用於多人連線。 開啟 Bullet.cs 修改程式碼~ 為了讓每個玩家的射擊都是相同而公平,動態生成與刪除改用 PhotonNetwork 方式。 開啟 PlayerController.cs 修改程式碼,透過 PhotonView.IsMine 判斷若是本地端玩家,按下 Fire1 時武器射擊。
[參考另一種方法] 修改 PlayerWeapon.cs 腳本,透過 PhotonView.IsMine 判斷若是本地端玩家,按下 Fire1 時武器射擊。
製作玩家血量 玩家被擊中時 HP 扣血,當 HP <= 0 時玩家倒地。 修改 Bullet.cs 子彈的腳本,讓子彈擊中遊戲角色時扣血。
建立 C# 腳本並命名為 PlayerState.cs 套用到玩家角色,程式碼如下: |