unity官方內置網絡unet的實例教程(八)

玩我們製作的這個小遊戲的時候,是不是玩家出生甚至死亡都擠在一個地方挺彆扭的啊?先來修改下這個問題吧:

我們得利用這個叫NetworkStartPosition的組件,因爲它內置有可用於執行處理產生位置的功能。

先創建一個空物體,重命名爲:Spawn Position 1,然後重置transform,選中它,在Inspector屬性面板添加NetworkStartPosition組件,將它的位置Position調整至 (3, 0, 0)。複製它,將複製體重命名爲:Spawn Position 2,將它的位置Position調整至(-3, 0, 0)。



在Hierarchy窗口,選中Network Manager,打開Spawn Info將Player Spawn Method更改爲Round Robin



NetworkManager將自動找到NetworkStartPosition組件。 NetworkManager在客戶端連接到服務端產生新玩家時使用這些位置。 此選項中兩種方法:隨機和循環。 顧名思義,隨機將使用NetworkSpawnPositions中的一個,循環將循環遍歷所有可用的生成位置,然後重用它們。 使用Random,完全有可能兩個或多個玩家在同一位置產生,具體取決於連接的客戶端數量。使用循環法,只有當客戶端比生成位置多的時候,重生點纔會被重用。

好了,重新生成遊戲,進行聯網測試吧。

爲了讓本實例教程更加完整,下面來設置重生點。創建一個簡單的系統,使用Spawn Position 上的NetworkStartPosition組件來構建一個玩家重生的重生點數組。

我們需要創建一個數組,並找到所有帶有NetworkStartPosition,將它們添加到數組中,最後使用它們的Transform Position作爲重生點。這與網絡管理器爲起點自動完成的工作原理非常相似,但在這種簡單的情況下,我們不會有一個循環解決方案,只是隨機的解決方案。

打開Health腳本,編輯以下代碼:



保存腳本,回到Unity保存,重新生成遊戲,進行聯網測試,現在,當遊戲開始時,角色被創建在場景中的不同位置。當角色當前的生命值降至零時,會在現有的一個位置隨機重生。



總結

這個例子已經涵蓋了製作簡單的多人網絡遊戲所需的大部分基本概念和組件,使用了Commands:客戶端調用服務端執行 、 Client Rpc服務端調用客戶端執行、SyncVar hooks同步變量值變化時調用被Hook的函數、[SyncVar]讓變量同步、NetworkIdentity具有網絡註冊識別、NetworkTransform同步變幻的同步功能、NetworkStartPosition生成位置、NetworkManager網絡管理等這些概念。