This document is about: FUSION 2
SWITCH TO

2 - Scene and Player

概述

第2部分說明了如何設定一個簡單的場景以及如何建立一個玩家預製件。在本章節的最後,您將看到一個可用的已連網場景,該場景為每個連線的客戶端生成一個玩家物件。

設定場景

從一個空的Unity場景開始。以右鍵按一下Unity中的階層分頁,然後選擇Fusion > Scene > Setup Networking in Scene

Add Networking

這將為場景新增一個Prototype Runner和一個Prototype Network Start

Add Networking
  • Prototype Runner包含Network Runner,這是運行Fusion模擬的核心元件。Network Events指令碼允許您將自己的函數快速連結到各種網路事件,如玩家加入或離開遊戲階段。
  • Prototype Network Start是一個原型元件,其中包含用於快速加入Fusion房間的啟動程序GUI。

接下來,將地板添加到場景中,以右鍵按一下Unity中的階層分頁,然後選擇3D Object > Plane。將遊戲物件重新命名為Floor,並將其位置重新設定為(0, 0, 0)

Add Networking

有了這些,場景設定就完成了。

建立玩家預製件

接下來建立玩家物件。以右鍵按一下階層並選擇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。

The Start Menu

一個玩家膠囊將出現在場景中。玩家還不能移動或與任何東西互動。在下一章節中,我們將透過執行玩家移動來讓玩家成為栩栩如生。

Player Capsule in the Scene

下一章是 共享模式基礎3 - 移動與相機

Back to top