2 - シーンとプレイヤー
概要
ここでは、シンプルなシーンのセットアップと、プレイヤーのプレハブの作成方法を説明します。この章で、各クライアントのプレイヤーオブジェクトがスポーンできるシーンを動作させる方法を学びます。
シーンのセットアップ
まず空のシーンから始めましょう。Unityのヒエラルキータブを右クリックし、Fusion > Scene > Setup Networking in Scene
を選択します。
![add networking](/docs/img/fusion/v2/fusion-100/shared-mode/add-networking-menu.png)
これでシーンにPrototype Runner
とPrototype Network Start
が追加されます。
![add networking](/docs/img/fusion/fusion-100/shared-mode/add-networking.png)
Prototype Runner
に含まれるNetworkRunner
は、Fusionのシミュレーションを実行するコアコンポーネントです。またNetwork Events
スクリプトによって、プレイヤーのセッションへの参加や退出などのイベントを簡単に独自実装を紐づけることができます。Prototype Network Start
はプロトタイピング用のコンポーネントで、Fusionのセッションに素早く参加するためのブートストラップのGUIが含まれます。
次にシーンに床を追加しましょう。Unityのヒエラルキータブを右クリックし、3D Object > Plane
を選択し、名前をFloor
にして、位置を(0, 0, 0)
にリセットします。
![add networking](/docs/img/fusion/fusion-100/shared-mode/floor.png)
これでシーンのセットアップは完了です。
プレイヤープレハブの作成
次にプレイヤーオブジェクトを作成します。 ヒエラルキーで右クリックし、3D Object > Capsule
を選択し、名前をPlayerCharacter
にします。
上記にNetworkObject
コンポーネントを追加します。このコンポーネントによって、ゲームオブジェクトにはネットワークIDが付与され、全てのピアがそのオブジェクトを参照できるようになります。
さらにCharacterController
コンポーネントを追加します。これは後でプレイヤーキャラクターを移動するコードを記述するために使用されます。
最後にNetworkTransfomr
コンポーネントを追加します。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
メソッドがあり、プレイヤーがセッションへ参加するたびに呼び出されます(メソッドが呼び出されるためには、スクリプトがNetworkRunner
と同じゲームオブジェクトに追加されている必要があります)。これはプレイヤー自身だけでなく、他の(異なる端末の)プレイヤーがセッションに参加した場合にも呼び出されるため、プレイヤー自身で呼び出された時のみプレイヤーオブジェクトをスポーンします。Runner.Spawn
でスポーンしたオブジェクトは、自動的にその他全てのクライアントでもスポーン(レプリケーション)されます。
SimulationBehaviour
は、現在のセッションのあらゆる情報を保持しているNetworkRunner
にアクセスするために使用されます。PlayerSpawner
コンポーネントをPrototype Runner
に追加して、PlayerCharacter
プレハブをPlayerPrefab
にアタッチします。
これでプレイヤーをスポーンする準備が完了しました。ゲームを実行しStart Shared Client
を押して、共有モードでFusionを開始します。
![the start menu](/docs/img/fusion/v2/fusion-100/shared-mode/startmenu.png)
シーン上にはプレイヤーが表示されますが、まだ移動するなどの操作は一切何もできません。次の章では、プレイヤーの移動を実装することで、プレイヤーに命を吹き込みます。
![player capsule in the scene](/docs/img/fusion/v2/fusion-100/shared-mode/player-in-scene.png)