Language:
Page Info
Skill Level:
Engine Version:

ブループリントでアクタをレプリケートする

本ページでは、サーバーとクライアントのマシン上で表示させる (またはさせない) ために、アクタの Replicates オプションの使用方法を説明します。2 つの例を示しますが、Replicating Actors (アクタのレプリケート) の例では、アクタのレプリケート方法、レプリケートされたアクタとレプリケートされていないアクタの違いを説明します。2 つ目の例は、 Switch Has Authority ノード (サーバーまたはクライアントがスクリプトを実行中か確認するためにチェックするノード) を使ってアクタの表示場所を動的にスポーンおよび制御する方法を図説します。

アクタのレプリケーション

この例では、Blueprint Third Person テンプレート (with Starter Content) を使用します。

以下のステップは、アクタを Replicate に設定する方法、および Replicated Actor と Non-Replicated Actor の違いを表したものです。

  1. Game/StarterContent/Blueprints」 フォルダで、 Blueprint_Effect_Fire を右クリックし [Duplicate] を選択します。

    HowTo1.png

  2. このステップを繰り返して、ブループリントの複製を 2 つ作ります。

  3. 複製の片方の名前を「 Fire_NoReplicate 」、もう片方を「 Fire_Replicate 」とします。

    HowTo2.png

  4. Fire_NoReplicate ブループリントを開いて、 classDefaults_button.png ボタンをクリックし、次に [Details] パネルで [Net Load on Client] のチェックを外します。

    HowTo3.png

    このオプションのチェックを外すと、マップのロード時にアクタが自動的にクライアント側にロードされなくなります。Replicates のチェックも外されているので、スポーンされたとしてもクライアント側のマシン上にはアクタは全く表示されません。

  5. コンパイル保存 してから、ブループリントを終了し、 Fire_Replicate ブループリントを開きます。

  6. classDefaults_button.png ボタンをクリックし、 [Details] パネルでブループリント デフォルトを開きます。そして [Replicates] のチェックボックスにチェックを入れます。

    HowTo4.png

    [Replicates] にチェックを入れると、クライアント マシン上でこのアクタのレプリケートが可能になります。[Net Load on Client] にもチェックを入れると、マップがロードされてクライアント マシン上に表示された時にアクタが自動的にロードされます。レプリケートが役立つのは、例えば、マップのロード時ではなくゲームプレイ中のどこかでアクタをスポーンしたい場合であり、[Replicates] を有効にして、アクタのスポーン時にレプリケートした複製をクライアント マシン上にスポーンするよう指示します。

  7. コンパイル保存 してから、ブループリントを閉じます。

  8. コンテンツ ブラウザ から、レベル内に Fire_NoReplicate ブループリントをドロップ&ドラッグします。

    HowTo5.png

  9. コンテンツ ブラウザ から、レベル内に Fire_Replicate ブループリントをドロップ&ドラッグします。

    HowTo6.png

  10. [Play] ボタンの隣の下向き矢印をクリックして [Number of Players] オプションを 2 に変更します。

    HowTo8.png

  11. [Play] ボタンをクリックして、エディタで再生します。

    HowTo9.png

    エディタで再生してクライアントのウィンドウが新しく開くと、 Fire_NoReplicate ブループリントがサーバー上で表示され、クライアント側では表示されないことに気付くと思います。ただし、 Fire_Replicate ブループリントは、クライアントとサーバーの両方で前述した通りに表示されます。

レプリケートされたアクタを動的にスポーンする

この例でも、前のセクションの Replicating Actors の例を使用します。

以下のステップでは、サーバー / クライアント側で Replication を使ってゲームプレイ中に動的にアクタをスポーンする方法をご紹介します。

  1. レベル ビューポートで、 Fire_ReplicateFire_NoReplicate アクタをレベルから削除します。

  2. [Modes] メニューの [All Classess] から 2 つの Target Points をレベル内にドラッグします。

    Switch1.png

  3. 片方のターゲット ポイントに「 No_Replicate 」、もう片方に「 Replicate 」という名前を付けて、 ワールド アウトライナー で両方を選択します。

    Switch2.png

  4. メインのツールバーの [Blueprints] メニューから Level ブループリント を開きます。

    GHT1_1.png

  5. Level ブループリント でグラフ内を 右クリック[Create References to 2 selected Actors] オプションを選びます。

    Switch4.png

  6. 再びグラフ内を 右クリック して、 Event Begin Play ノードを検索して追加します。

    Switch5.png

    Event Begin Play ノードを使ってゲーム開始時にスポーンしますが、ゲームプレイ中にアクタをスポーンするためにこのノードの代わりに使いたいものに変えることも可能です。キーを押すだけでもよいですし、スポーンするアクタを呼び出す別の種類の動的イベントまで、あらゆるものが可能です。

  7. グラフ内を 右クリック して、 Spawn Actor from Class ノードを探して追加したら、 ClassFire_Replicate に設定します。

  8. このステップを繰り返して Spawn Actor from Class ノードをもう 1 つ作成し、 Class を Fire_NoReplicate に設定します。

  9. 以下のようにノードを接続します。

    Switch6.png

  10. 青い Replicate ノードを引き出して、 Get Actor Transform ノードを探して追加します。

  11. Get Actor Transform ノードを Spawn Actor from Class ノードの Spawn Transform ピンへ接続します。

  12. ここまでのステップを青い No_Replicate ノードに対して繰り返します (結果は以下のようになります)。

    Switch7.png

    次に、スクリプトを実行しているのは Authority (サーバー) なのか、または Remote マシン (クライアント) なのかを判断するために Switch Has Authority (もしくは Authority Guard) ノードを追加します。通常は Authority に設定して、プレイヤーのヘルス値やポイントの配分、経験値の調整など、クライアント マシンでごまかしが行われてはならないゲームプレイの重要なスクリプトはサーバーのみが実行できるようにします。

  13. Event Begin Play ノードを引き出して、 Switch Has Authority ノードを追加します。

    Switch9.png

    Authority が自動的にデフォルトとなり、 1 つ目の Spawn Actor from Class ノードへ接続されます。

  14. コンパイル したら Level ブループリント を終了し、エディタで再生します。

    Switch10.png

    サーバーがスクリプトを実行したため、サーバー側では火のエフェクトは両方とも表示されているのに対して、クライアント側ではレプリケート設定になっている火だけが表示されていることが分かります。これは、サーバーとクライアントの両方ではなくどちらか一方でスポーンしたい場合、さらに重要なことには、サーバーまたはクライアントのいずれかで Switch Has Authority ノードに続くスクリプトを実行したい場合に便利です。

  15. Level ブループリント に戻り、 Remote ピンを引き出して、以下のように接続します。

    Switch11.png

  16. コンパイル したら Level ブループリント を終了し、エディタで再生します。

    Switch12.png

    Switch Has Authority が Remote に設定されているので、後に続くスクリプトはサーバー側ではなくクライアント側でのみ実行されることが分かります。例えば、プレイヤーがダメージを受けると適用されるスクリーン エフェクトなどは、 Remote を Authority Guard として使うことで、そのエフェクトをスクリプトを実行するリモートのクライアントにのみスポーンすることができます。