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

ブループリントで追加するアクタの Replicates チェックボックスを使用するためのガイドです。

Choose your operating system:

Windows

macOS

Linux

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

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

この例では、 スターター コンテンツ を有効にして Blueprint サードパーソン テンプレート を使用します。

以下は、アクタを 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] ボタンをクリックして、エディタで再生します。

    クリックしてフルサイズで表示

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

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

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

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

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

  2. プロジェクトの [Place Actors] パネルの All Classess タブから、2 つの Target Point をレベルにドラッグします。

    クリックしてフルサイズで表示

  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 ノードを探して追加したら、 Class Fire_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 ブループリント を終了し、エディタで再生します。

    クリックしてフルサイズで表示

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

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

    Switch11.png

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

    クリックしてフルサイズで表示

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

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル