2 - シーンとプレイヤー
概要
ここでは、プロトタイピング用のコンポーネントを含むシンプルなシーンのセットアップと、プレイヤーのプレハブの作成方法を説明します。この章で、各クライアントのプレイヤーオブジェクトがスポーンできるシーンを動作させる方法を学びます。
シーンのセットアップ
まず空のシーンから始めましょう。Unityのヒエラルキータブを右クリックし、Fusion > Scene > Setup Networking in Scene
を選択します。

これでシーンにPrototype Runner
とPrototype Network Start
が追加されます。

Prototype Runner
に含まれるNetworkRunner
は、Fusionのシミュレーションを実行するコアコンポーネントです。またNetwork Events
スクリプトによって、プレイヤーのセッションへの参加や退出などのイベントを簡単に独自実装を紐づけることができます。Prototype Network Start
はプロトタイピング用のコンポーネントで、Fusionのセッションに素早く参加するためのブートストラップのGUIが含まれます。
次にシーンに床を追加しましょう。Unityのヒエラルキータブを右クリックし、3D Object > Plane
を選択し、名前をFloor
にして、位置を(0, 0, 0)
にリセットします。

これでシーンのセットアップは完了です。
プレイヤープレハブの作成
次にプレイヤーオブジェクトを作成します。 ヒエラルキーで右クリックし、3D Object > Capsule
を選択し、名前をPlayerCharacter
にします。
上記にNetworkObject
コンポーネントを追加します。このコンポーネントによって、ゲームオブジェクトにはネットワークIDが付与され、全てのピアがそのオブジェクトを参照できるようになります。
さらにCharacterController
コンポーネントを追加します。これは後でプレイヤーキャラクターを移動するコードを記述するために使用されます。
最後にNetworkTransfomr
コンポーネントを追加します。NetworkTransform
によって、オブジェクトの位置が自動的に他のクライアントへ同期されます。
PlayerCharacter
をProject
ウインドウにドラッグしてプレハブを作成した後、オブジェクトをシーンから削除してください。これでプレイヤーキャラクターをスポーンする準備が完了しました。
プレイヤーのスポーン
マルチプレイヤーゲームでは、プレイヤーごとにキャラクターをインスタンス化したいことも多いでしょう。シングルプレイヤーゲームとは異なり、インスタンス化は特別なRunner.Spawn
メソッドで行われ、全員のプレハブのインスタンス化を処理します。
プレイヤーキャラクターをスポーンする適切なタイミングは、クライアントがセッションに参加した時です。そのためにカスタムスクリプトが必要です。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);
}
}
}
スポーン処理は非常にシンプルです。SimulationBehaviour
を継承するとNetworkRunner
へアクセス可能になり、そこには現在のセッションのすべての情報(ローカルプレイヤーのIDを含む)が保持されています。
IPlayerJoined
インターフェースにはPlayerJoined
メソッドがあり、そのスクリプトがNetworkRunner
と同じゲームオブジェクトにあるなら、プレイヤーがセッションへ参加するたびに呼び出されます。これはプレイヤー自身の時だけでなく、他の(異なる端末の)プレイヤーがセッションへ参加した時にも呼び出されます。
Runner.Spawn
でスポーンしたオブジェクトは、自動的にその他全てのクライアントでもスポーン(レプリケーション)するため、ローカルプレイヤーが参加してPlayerJoined
が呼び出された時のみスポーンを行ってください。
PlayerSpawner
コンポーネントをPrototype Runner
に追加して、PlayerCharacter
プレハブをPlayerPrefab
にアタッチします。
これでプレイヤーをスポーンする準備が完了しました。ゲームを実行しStart Shared Client
を押して、共有モードでFusionを開始します。

シーン上にはプレイヤーが表示されますが、まだ移動するなどの操作は一切何もできません。次の章では、プレイヤーの移動を実装することで、プレイヤーに命を吹き込みます。
