生成和再生成
初始化生成點
現在玩家角色的生成點是從原點( Vector3.zero )開始。當有多個玩家連線,會重疊在出生點上,正常的情況是角色會在不同的地方生成。 不過連線系統提供了 NetworkStartPosition Component 來處理產生位置。
- 首先產生空遊戲物件,命名為 Spawn Position 1 。
- 掛載 NetworkStartPosition Component。
- 設定位置。
- 複製 Spawn Position 1 物件,改名為 Spawn Position 2 。
- 改變 Spawn Position 2 的位置。
- 到 Network Manager ,設定 Player Spawn 為 Round Robin 。
- Network Manager 會自動場景上掛有 NetworkStartPosition 的物件,並取用其位置產生玩家。
- Player Spawn 有兩種方法:Random 和 Round Robin 。
- Random 作用為會在可用 NetworkStartPosition 的物件隨機挑一個出來使用。
- Round Robin 作用為優先使用沒用過的 NetworkStartPosition 的物件,直到全部都輪流到了,才會開始再使用。
設定生成點
在此教學最後一步,利用 NetworkStartPosition component 的陣列來製作一個簡單的玩家隨機生成系統。雖然跟網路連線比較無關,但會讓此範例更完整。
- 開啟 Health 腳本,新增放置出生點的陣列。
private NetworkStartPosition[] spawnPoints;
新增 Start 方法。
void Start () { }
判斷此物件是不是本地玩家
if (isLocalPlayer) { }
- 找出所有掛載 NetworkStatrtPosition 的物件並加到陣列內
spawnPoints = FindObjectsOfType<NetworkStartPosition>();
- 在RpcRespawn 方法內移除此述句
// Set the player’s position to origin transform.position = Vector3.zero;
替換為
// 宣告並設定區域變數為原點 Vector3 spawnPoint = Vector3.zero; // 假如陣列有東西,就隨便拿一個出來用 if (spawnPoints != null && spawnPoints.Length > 0) { spawnPoint = spawnPoints[Random.Range(0, spawnPoints.Length)].transform.position; } // 把取出來的出生點位置指定給角色物件 transform.position = spawnPoint;
7.儲存並測試,現在遊戲一連線上,角色會在隨機的位置上生成。