2 - シーンとプレイヤー
概要
ステップ2では、簡単なシーンの設定方法と、プレイヤープレハブの作成方法について説明します。この章の終わりには、接続された各クライアントにプレイヤーオブジェクトを生成するネットワークシーンが完成しています。
シーンの設定
空のUnityシーンからスタートします。UnityのHierarchyタブを右クリックし、Fusion > Setup > Networking
を選択します。
シーンにPrototype Runner
とPrototype Network Start
が追加されます。
-Prototype Runner
には、Fusionシミュレーションを実行するコアコンポーネントである、Network Runner
が含まれています。Network Events
スクリプトは、プレイヤーのセッションへの参加や退出など、様々なネットワークイベントに独自の機能を素早くリンクさせることができます。
-Prototype Network Start
は、Fusionルームに素早く参加するためのブートストラップGUIを含むプロトタイピングコンポーネントです。
次に、シーンに床を追加します。UnityのHierarchyタブで右クリックし、3D Object > Plane
を選択します。GameObject の名前を Floor
に変更し、その位置を (0, 0, 0)
にリセットします。
これで、シーンの設定は完了です。
プレーヤープレハブの作成
次にプレイヤーオブジェクトを作成します。Hierarchy上で右クリックし、CreateEmpty
を選択します。GameObjectをPlayerCharacter
にリネームします。
これに NetworkObject
コンポーネントを追加します。このコンポーネントはオブジェクトにネットワークIDを与え、すべてのピアが参照できるようにします。
コンポーネントのDestroy When State Authority Leaves
にチェックを入れます。この設定により、オブジェクトを管理しているクライアント(StateAuthority
)が退出すると、Fusionはオブジェクトをデスポーンするようになります。多くのゲームでは、プレイヤーオブジェクトを保持し、再接続時にプレイヤーに再割り当てすることができるので、これは意図した動作ではありませんが、このサンプルではこれを使用します。
State Authority Override
のチェックをはずします。この設定により、他のクライアントがNetworkObjectを制御することができます。このオブジェクトはプレイヤーオブジェクトなので、常に同じクライアントがコントロールできるようにする必要があります。他の設定はすべてそのままにしておきます。
CharacterController
コンポーネントを追加します。これは後で、プレイヤーキャラクターを移動させるための動作コードに使用されます。
次に、NetworkTransform
コンポーネントを追加します。
現在、プレイヤーオブジェクトには、まだビジュアルが含まれていません。Fusionでは、ビジュアルに関連するものはすべて、NetworkObjectの子である別のGameObjectに置かれます。この GameObject は、Interpolation Target
と呼ばれています。これによって、オブジェクトの移動がスムーズに見えるようになります。
Interpolation Target
オブジェクトには、プレイヤーオブジェクトの表示に関連するものが含まれているはずです。つまり、MeshRenderer、Animator、Audiosource、Particle Systemのようなコンポーネントです。
階層を右クリックし、3d Object > Capsule
を選択します。GameObjectの名前をInterpolation Target
に変更し、そこからCapsule Colliderを削除します。
PlayerCharacter
オブジェクトのNetworkTransform
で、InterpolationTarget
フィールドにInterpolation Target
GameObjectを設定します。
PlayerCharacter
をProject
ウィンドウにドラッグしてプレハブを作成し、シーンから削除してください。これでプレイヤーキャラクターがスポーンされる準備が整いました。
プレイヤーのスポーン
1人用のゲームとは異なり、シーンに1つのプレイヤーオブジェクトを置くだけでは不十分です。マルチプレイの場合は、セッションに参加するプレイヤーごとにプレイヤーオブジェクトをスポーンする必要があります。そのためには、カスタムスクリプトが必要です。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);
}
}
}
spawnのコードは非常にシンプルです。IPlayerJoined
インターフェイスにはPlayerJoined
関数があり、ランナーと同じGameObjectにいるプレイヤーがセッションに参加するたびに呼ばれます。これは私たちのプレイヤーだけでなく、別のデバイスから参加する他のプレイヤーにも起こります。プレイヤーオブジェクトをスポーンする必要があるのは、自分のプレイヤーだけです。Runner.Spawn
でオブジェクトがスポーンされると、他のすべてのクライアントに自動的に複製されます。
SimulationBehaviour
は、ローカルプレイヤーのプレイヤーIDなど、現在のセッションに関するすべての情報を含むNetworkRunner
へのアクセスを取得するために使用されます。PlayerSpawner
コンポーネントを Prototype Runner
GameObject に追加し、player prefab を割り当てます。
これで、プレイヤースポーンの設定は完了です。プレイモードに入り、Start Shared Client
を押して、SharedモードでFusionを起動します。シーンにプレイヤーカプセルが表示されます。プレイヤーは、まだ動いたり、インタラクトしたりすることはできません。次の章では、プレイヤーの動きを実装することで、プレイヤーに命を吹き込みます。
次ページ Fusion 103 Shared
Back to top