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

遊戲製作到了這裏,已經實現非常簡單的打打殺殺了,不過大家控制的角色都是露面就開打,缺少了一點浪漫氣息。接下來,製作些非遊戲裏面的怪物或者敵人吧,這樣可以稍微增加些遊戲的趣味性。

當我們的客戶端連接服務端的時候,生成了我們的角色,那些敵人應該也被服務端生成。首先,需要一個Enemy Spawner來生成敵人。

回到Unity編輯器,在Hierarchy面板中新建一個空物體,重命名爲:Enemy Spawner,在屬性面板進行重置,重置後值爲默認值



然後選中它,在屬性面板添加NetworkIdentity組件,在組件屬性中將Server Only選中:



將Server Only打上對勾,即設置bool爲true,這樣此Enemy Spawner只運行在服務端。接下來,創建c#腳本,重命名爲:EnemySpawner,將它拖放到Enemy Spawner的屬性面板中,書寫代碼如下:



EnemySpawner

這個腳本有如下幾個關鍵點:

1. 引入 UnityEngine.Networking 命名空間

2.繼承關係變爲NetworkBehaviour

3.使用該類的虛擬函數OnStartServer進行重寫

4.當服務器啓動時,會隨機產生許多敵人有不同的位置和旋轉,然後使用NetworkServer.Spawn產生這些敵人。

這裏引用官方的介紹:

OnStartServer與OnStartLocalPlayer非常相似,稍早的時候用它來改變玩家控制的角色的顏色。在這種情況下,每當服務端開始監聽網絡時,服務端就會調用OnStartServer。

OK,保存腳本,接着我們得製作敵人得預製體了。爲了方便起見,我們將使用玩家預製作爲敵人的原型。

回到Unity編輯器,將Player預製件拖到Hierarchy中,將Player的名稱更改爲「Enemy」,然後刪除子物體Gun和BulletSpawn,然後刪除屬性面板中PlayerController腳本。



1



2

接着,將角色顏色更改爲黑色,墨鏡的顏色更改爲默認的白色。



然後再給它弄個帥氣的髮型:)

首先,選中Enemy,右鍵新建一個Cube物體,並重命名爲:Mohawk,選中它,將位置Position調整至(0.0. 0.55, -0.15),縮放Scale調整至(0.2, 1.0, 1.0)。最後刪除掉 Mohawk’的碰撞體 BoxCollider。



敵人的樣子最終是這樣的:




最後,將這個Enemy GameObject 拖回到Prefabs文件夾中,創建一個新的敵人預製。(注意千萬不能跟以前一樣點Apply),最後刪除Hierarchy中的敵人。

接下來,我們做點縫縫補補的收尾工作:

1. 在Hierarchy窗口選中 NetworkManager,打開屬性面板中的Spawn Info,在Registered Spawnable Prefabs下面再點擊 」+「 創建一個空白位置,將敵人預製體拖放進去。



接着,選中Enemy Spawner,將敵人預製拖進空白窗口並將敵人數量改爲4,保存。



現在敵人也有生命值和血條跟我們控制的角色是一樣的,子彈還會調用造成傷害的函數,所以不需要改變。

好吧,重新生成遊戲,聯網,然後進行測試下看看。

還有有些問題,比如:敵人被擊中會掉血,但是當他們的生命值爲0的時候,他們只是在原地死了,在原地重生。

好吧,關閉測試,進入unity編輯器。首先,得將玩家控制得角色和敵人區分開,讓它們產生不同得效果。這裏使用最簡單得辦法,即利用bool值判斷。

打開Health腳本,

添加一個公有得bool值:public bool destroyOnDeath;並在腳本中進行下判斷,具體如下:



保存 腳本,回到Unity編輯器,在Prefabs文件夾選中Enemy預製體,將destroyOnDeath得框勾選:



保存,重新生成遊戲,並聯網測試,現在敵人被攻擊後,生命值爲0時,會死亡並消失,玩家生命值爲0,會在原點重生。