This document is about: FUSION 1
SWITCH TO

This page is a work in progress and could be pending updates.

2 - Scene and Player

概述

Fusion 102共享說明了如何設定一個簡單的場景以及如何建立一個玩家預製件。在這個章節的結尾,您將有一個工作中的已連網場景,其針對各個已連線客戶端來生成一個玩家物件。

設定場景

從一個空的Unity場景啟動。以右鍵按一下Unity中的階層分頁並且選擇Fusion > Setup > Networking

add networking

這將新增一個Prototype Runner及一個Prototype Network Start到場景。

add networking
  • Prototype Runner含有Network Runner,其是運行Fusion模擬的核心元件。Network Events便條讓您可以快速地鏈接您自己的功能到各種網路事件,比如玩家加入或離開遊戲階段。
  • Prototype Network Start是一個原型元件,其含有一個啟動程序GUI來快速地加入一個Fusion房間之中。

下一步,新增一個地面到場景,以右鍵按一下Unity中的階層分頁並且選擇3D Object > Plane。重新命名遊戲物件為Floor並且重新設定它的位置為(0, 0, 0)

add networking

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

建立玩家預製件

下一步是建立玩家物件。以右鍵按一下階層並且選擇CreateEmpty。重新命名遊戲物件為PlayerCharacter

新增一個NetworkObject元件到它。這個元件給了物件一個網路識別,這樣所有同儕節點可以參照它。

勾選元件上的Destroy When State Authority Leaves。這個設定讓Fusion在控制物件的客戶端( StateAuthority)離開時取消生成物件。針對許多遊戲,這不是意圖的行為,因為玩家物件可以保留在周圍,並且在玩家重新連線之後重新指派給玩家,但是在這個範例中將使用它。

取消勾選Allow State Authority Override。這個設定允許其他客戶端來控制網路物件。因為這個是玩家物件,我們總是希望同一個客戶端能夠持續控制它。保持所有其他設定不變。

新增一個CharacterController元件。這稍後將由移動程式碼使用,以移動玩家角色。

下一步是新增一個NetworkTransform元件到它。

目前玩家物件沒有含有任何視覺效果。在Fusion中與視覺效果有關的所有事情,是放在一個分離的遊戲物件上,其是網路物件的下層。這個網路物件被稱為Interpolation Target。這確保移動物件時看起來很平順。

Interpolation Target物件應該含有任何與顯示玩家物件有關的事情。所以比如網格轉譯器、動畫工具、音源及粒子系統等元件。

以右鍵按一下階層並且選擇3d Object > Capsule。重新命名遊戲物件為Interpolation Target並且 從它移除膠囊碰撞器。

add networking

PlayerCharacter物件的NetworkTransform上,設定InterpolationTarget欄位為Interpolation Target遊戲物件。

add networking

拖曳PlayerCharacterProject視窗之中,以建立一個預製件,並且從場景刪除它。有了這些,已經準備好生成玩家角色。

玩家生成

不同於單一玩家遊戲,在場景中只有一個單一玩家物件是不足夠的。針對多人玩家遊戲,需要針對各個加入遊戲階段的玩家來生成玩家物件。為了做到這點,需要一個自訂指令碼。建立一個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, player);
        }
    }
}

生成程式碼是非常簡單的。IPlayerJoined介面有一個PlayerJoined函數,如果行為與運行器在同一個遊戲物件上的話,在一個玩家加入遊戲階段時將調用該函數。這個情況發生在我們自己的玩家上,也發生在從一個不同的裝置加入的任何其他玩家上。只需要針對我們自己的玩家來生成一個玩家物件。當一個物件以Runner.Spawn被生成,它會自動複製到所有其他客戶端。

模擬行為 用於存取 網路運行器,其含有所有關於目前遊戲階段的資訊,包含本機玩家的玩家ID。

新增PlayerSpawner元件到Prototype Runner遊戲物件,並且指派玩家預製件到它。

有了這個,玩家生成已經完全設定好。輸入遊玩模式並且按下Start Shared Client以在共享模式中啟動Fusion。在場景中將生成一個玩家膠囊。目前玩家無法移動或與任何東西互動。在下一個章節我們將透過執行玩家移動來讓玩家活起來。

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

Back to top