Language:
Page Info
Skill Level:
Engine Version:

ブループリントで変数をレプリケートする

このページ中:

アクタ と同様に 関数 もネットワーク上でレプリケーション可能であり、変数 も同様です。ゲームプレイに重要な変数だけを Network Authority (サーバー) 側で編集し、知っておく必要のある情報のみをリモートのマシン (クライアント) にレプリケートします。いつ変数が変更できるかは不正につながりうるためクライアントに定義させないようにします (例、ヘルス、弾薬、経験値)。

変数を Replicated に設定することができます。つまり、この変数はサーバーからクライアントにレプリケートされる変数の 1 対 1 のコピーを作ります。または、RepNotify を使用することもできます。RepNotify は Replicated が行うことを何でも行うだけでなく、アタッチされている変数が更新されるたびに呼び出され、サーバーとクライアントの両方のマシンで実行する関数を提供します。

このページでは、Replicated 変数と RepNotify 変数の使用例について説明します。

Replicated

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

この例では、Replicated 変数を作成します。これは、サーバーとクライアントの両方で見ることができるカウントダウン タイマーで使用されます。

  1. 「Content/StarterContent/Blueprints」 フォルダ内で、Blueprint_Effect_Fire ブループリントを開きます。

  2. Class Defaults を選択した状態で、[詳細] パネルの [Replication][Replicates] オプションにチェックを入れます。

    HT_0.png

    これで、このブループリントがネットワーク上で接続されているすべてのマシンに確実にレプリケートされるようにします。

  3. [Components] ウィンドウから [Add Component] ボタンをクリックして、 Text Render コンポーネントを検索して追加します。

    HT_1.png

  4. ビューポート タブでテキストが見えやすくなるように炎の上のお好みの位置に移動します。

    HT_2.png

  5. [イベント グラフ] タブをクリックし、グラフ内で 右クリック し、Event Begin Play ノードを追加します。

  6. Event Begin Play からドラッグして、 Switch Has Authority ノードを検索して追加します。

  7. Authority ピンからドラッグして、Time1 に設定し、Looping にチェックを入れた Set Timer ノードを追加します。

    HT_3.png

    ここでは、Switch Has Authority ノードを使用して、このブループリントがスポーンしたときに Authority (Server) でのみ Set Timer 関数を呼び出します。このノードを使用して Timer 関数が確実にサーバーでのみ実行し、クライアントでは実行されないようにします。このスクリプトがゲームのクリティカル データを処理する場合、不正を防ぐために、クライアントで実行するのではなくサーバーでのみ実行し、それからクライアント マシンにデータをレプリケーションするようにします。

  8. [MyBlueprint] ウィンドウで、 CountDownTimer と呼ばれる新規変数を作成します。

  9. 新規変数の [詳細] パネルで、Integer 型に変更し、 コンパイル し、Default Value10 に設定します。

    HT_4.png

  10. グラフ内で 右クリック して、 カスタム イベント を新規で作成し、Update Timer という名前にします。

  11. Update TimerBranch ノードに接続し、True ピンから Set CountDownTimer ノードを追加します。

  12. グラフ内で 右クリック して、Get CountDownTimer ノードを追加します。次にそこからドラッグして Int - Int ノードを使用してそのボックスに 1 を入力します。

  13. CountDownTimer ノードから再度ドラッグして Int > Int ノードを使用して以下のようにノードを接続します。

    HT_5.png

    ここでは、UpdateTimer が呼び出されるたびに CountDownTimer に対してそこから 1 を差し引くこと (ただしタイマーが 0 より大きい場合に限る) を指示しています。

  14. Set Timer ノードの Function Name でカスタム イベント (UpdateTimer) の名前を追加します。

    HT_6.png

    これで、タイマーに対してストップと指示するまで UpdateTimer イベントが1秒毎に呼び出されます。

  15. グラフ内で 右クリック して、Event Tick ノードを追加します。

  16. Control キーを押した状態で MyBlueprint ウィンドウから TextRender コンポーネント内でドラッグし、そこからドラッグして Set Text ノードを使用します。

  17. Control を押しながら、 CountDownTimer 変数をドラッグしてそれを Set Text ノードの Value に接続します。

    HT_7.png

    変換ノードが自動的に作成されます。ここでは、テキストをカウントダウン タイマーの値に設定します。

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

  19. コンテンツ ブラウザ から Blueprint_Effect_Fire をレベルにドラッグします。

    HT_9.png

  20. メインツールバーで [Play] ボタンの横にある下向きの矢印をクリックし、Number of Players を 2 に設定します。

    NoOfPlayers.png

  21. [Play (プレイ)] ボタンをクリックして、エディタで再生します。

    HT_11.png

    エディタで再生する場合、Server は 0 までカウントダウンしますが、 クライアント はしません。

  22. Blueprint_Effect_Fire ブループリントに戻ります。

  23. CountDownTimer 変数の [詳細] パネルの Replication を、 Replicated に設定します。

    HT_12.png

    これで、このプロパティは接続されているマシンにレプリケートされます。

  24. グラフが更新し、 CountDownTimer 変数の各インスタンスにはレプリケートされたアイコンが含まれます。

    HT_13.png

  25. コンパイル保存 してから、ブループリントを閉じてエディタで再生します。

    HT_14.png

    これでサーバーとクライアントの両方で 10 からカウントダウンするようになり、テキストが適切に表示されます。テキスト レンダーを更新するために整数を使用していますが、この変数はプレイヤー キャラクターのヘルス、武器、その他のゲームプレイ関連の変数を表すために簡単に使用することができます。

RepNotify

この例では、引き続き上記の Replicated の例を使用します。

上記の Replicated の例では、サーバーとクライアントの両方で表示されるカウントダウン タイマーを作成しました。ここの例では、 RepNotify 変数を使用し、カウントダウン タイマーが 0 になると信号を送り、この時点でサーバーとクライアントの両方で炎のエフェクトを無効にします。

  1. Blueprint_Effect_Fire ブループリントを開きます。

  2. [MyBlueprint] ウィンドウで、 Control を押しながら P_Fire エフェクト内でドラッグして、そこからドラッグして Deactivate ノードを使用します。

  3. Update タイマーに接続された BranchFalse ピンから、 Deactivate ノードを以下のように接続します。

    HT_15.png

    ここでは、UpdateTimer が呼び出されると、CountDownTimer から 1 を差し引くこと (0 より大きい場合に限り) を示しています。0 よりも大きくなければ、 P_Fire パーティクル エフェクトを Deactivate します。

  4. コンパイル保存 してから、ブループリントを閉じてエディタで再生します。

    HT_16.png

    エディタで再生する場合、0 になると炎のエフェクトはサーバー側でのみ無効になります。

  5. Blueprint_Effect_Fire ブループリントに戻ります。 Deactivate と呼ばれる Boolean 型の変数を新規で作成します。

  6. Deactivate 変数で、Replication タイプを RepNotify に必ず設定するようにします。

    HT_17.png

  7. 変数を RepNotify に設定後、新しい関数が自動的に作成されたことがわかります。

    HT_18.png

    これは、RepNotify として代入された変数が変更するたびに呼び出され、サーバーとクライアントのマシンの両方で実行されます。

  8. On Rep Deactivate 関数を ダブルクリック して開きます。

  9. Control を押しながら P_Fire コンポーネント内でドラッグして、そこから Deactivate ノードを追加します。

    HT_19.png

  10. Event Graph に戻り、UpdateTimer イベントを探します。

  11. BranchFalse から、True に設定するようにチェックが入った Set Deactivate ノードを追加します。

    HT_20.png

    変数に Set w/Notify と表示され、Notify 関数も呼び出されることを表しています。

  12. コンパイル保存 してから、ブループリントを閉じてエディタで再生します。

    HT_21.png

    今回はエディタで再生すると、タイマーが 0 になったときにクライアントとサーバーの両方で炎のエフェクトが無効になります。