2 - Scene and Player
概述
第2部分說明了如何設定一個簡單的場景以及如何建立一個玩家預製件。在本章節的最後,您將看到一個可用的已連網場景,該場景為每個連線的客戶端生成一個玩家物件。
設定場景
從一個空的Unity場景開始。以右鍵按一下Unity中的階層分頁,然後選擇Fusion > Scene > Setup Networking in Scene
。
這將為場景新增一個Prototype Runner
和一個Prototype Network Start
。
Prototype Runner
包含Network Runner
,這是運行Fusion模擬的核心元件。Network Events
指令碼允許您將自己的函數快速連結到各種網路事件,如玩家加入或離開遊戲階段。Prototype Network Start
是一個原型元件,其中包含用於快速加入Fusion房間的啟動程序GUI。
接下來,將地板添加到場景中,以右鍵按一下Unity中的階層分頁,然後選擇3D Object > Plane
。將遊戲物件重新命名為Floor
,並將其位置重新設定為(0, 0, 0)
。
有了這些,場景設定就完成了。
建立玩家預製件
接下來建立玩家物件。以右鍵按一下階層並選擇3d Object > Capsule
。將遊戲物件重新命名為PlayerCharacter
。
向其中新增NetworkObject
元件。此元件為物件提供網路識別,以便所有同儕節點都可以參照它。
新增一個CharacterController
元件。這將在之後被移動程式碼用來移動玩家角色。
最後,新增一個NetworkTransform
組件到它。NetworkTransform
會自動將物件的位置同步到其他客戶端。
將PlayerCharacter
拖到Project
視窗中,以建立一個預製件並將它從場景中刪除。這樣,玩家角色就可以開始生成了。
玩家生成
與單人玩家遊戲不同,僅僅在場景中有一個單一玩家物件是不夠的。對於多人玩家遊戲,需要為每個加入遊戲階段的玩家生成一個玩家物件。為此,需要一個自訂指令碼。建立一個PlayerSpawner
指令碼並開啟它。向其中新增以下程式碼:
C#
using Fusion;
using UnityEngine;
public class PlayerSpawner : SimulationBehaviour, IPlayerJoined
{
public GameObject PlayerPrefab;
public void PlayerJoined(PlayerRef player)
{
if (player == Runner.LocalPlayer)
{
Runner.Spawn(PlayerPrefab, new Vector3(0, 1, 0), Quaternion.identity);
}
}
}
生成程式碼非常簡單。IPlayerJoined
介面有一個PlayerJoined
函數,當玩家加入遊戲階段時,如果行為與運行器在同一個遊戲物件上,就會調用該函數。這種情況發生在我們自己的玩家身上,也發生在從不同裝置加入的任何其他玩家身上。它只需要為我們自己的玩家生成一個玩家物件。當使用Runner.Spawn
生成物件時,它會自動複製到所有其他客戶端。
模擬行為
用於存取網路運行器
,其包含有關目前遊戲階段的所有資訊,包括本機玩家的玩家ID。將PlayerSpawner
元件新增到Prototype Runner
遊戲物件中,並指派PlayerCharacter
預製件給它。
有了這個,玩家生成就完全設定好了。進入遊玩模式,然後按Start Shared Client
以在共享模式下啟動Fusion。
一個玩家膠囊將出現在場景中。玩家還不能移動或與任何東西互動。在下一章節中,我們將透過執行玩家移動來讓玩家成為栩栩如生。
下一章是 共享模式基礎3 - 移動與相機
Back to top