This document is about: FUSION 1
SWITCH TO

このページは編集中です。更新が保留になっている可能性があります。

2 - シーンとプレイヤー

概要

ステップ2では、簡単なシーンの設定方法と、プレイヤープレハブの作成方法について説明します。この章の終わりには、接続された各クライアントにプレイヤーオブジェクトを生成するネットワークシーンが完成しています。

シーンの設定

空のUnityシーンからスタートします。UnityのHierarchyタブを右クリックし、Fusion > Setup > Networkingを選択します。

Add Networking

シーンにPrototype RunnerPrototype Network Startが追加されます。

Add Networking

-Prototype Runnerには、Fusionシミュレーションを実行するコアコンポーネントである、Network Runnerが含まれています。Network Eventsスクリプトは、プレイヤーのセッションへの参加や退出など、様々なネットワークイベントに独自の機能を素早くリンクさせることができます。
-Prototype Network Startは、Fusionルームに素早く参加するためのブートストラップGUIを含むプロトタイピングコンポーネントです。

次に、シーンに床を追加します。UnityのHierarchyタブで右クリックし、3D Object > Planeを選択します。GameObject の名前を Floor に変更し、その位置を (0, 0, 0) にリセットします。

Add Networking

これで、シーンの設定は完了です。

プレーヤープレハブの作成

次にプレイヤーオブジェクトを作成します。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を削除します。

Add Networking

PlayerCharacterオブジェクトのNetworkTransformで、InterpolationTargetフィールドにInterpolation Target GameObjectを設定します。

Add Networking

PlayerCharacterProjectウィンドウにドラッグしてプレハブを作成し、シーンから削除してください。これでプレイヤーキャラクターがスポーンされる準備が整いました。

プレイヤーのスポーン

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