関連ブログ
- [UE5]ノード不要!10秒でジェットパックを作る 2025.01.15UE
- [UE5] ControlRigのAimで回転軸を分離した砲台を作る 2025.01.08UE
- チャンクダウンローダーを用いたアセットの配布に関する問題対処事例 2024.12.25UE
CATEGORY
2023.08.16UE5UE/ 初心者向けUE/ Network
執筆バージョン: Unreal Engine 5.2
|
こんにちは、エンジニアの山中です。
今回はネットワークコンテンツにおける情報の伝達について
具体例を用いてご紹介します。
2人プレイのネットワークゲームを制作すると仮定して
接触した際にランダムな色に変化する箱を作ってみましょう。
下記の画像の設定をそれぞれ変更しましょう。
これでDedicatedサーバ + クライアント2人の環境が
エディターで確認可能になります。
Actorを作成して、見た目となるMeshを追加します。
処理はとりあえず下記のように組んでみました。
キャラクターが接触した際に、先程追加したMeshのマテリアルをランダムな色に変化させる処理です。
この状態で一度起動し、キャラクターを接触させてみましょう。
クライアント環境それぞれで異なる色に変化してしまいます。
これは現段階でネットワークを考慮した実装になっていない為です。
今回はこの色の統一がゲーム性に関わる重要な処理であると仮定し、
クライアント2人の環境で同じ色になるように実装を考えてみましょう。
まず、各環境で勝手にランダム値を決定してしまうのは問題ですので
サーバ環境、クライアント環境のいずれかで確定させた情報を
他の環境へ伝達する方針で実装してみます。
ランダム値の算出に関してはサーバ環境で問題無く処理される為、
今回は分かりやすくサーバ環境で確定させるものとします。
これにより、サーバーの情報がクライアントで再現されるようになります。
これから2つの方法をご紹介しますが、その下準備と捉えてもらって問題無いかと思います。
サーバからイベントを実行する形で、クライアントへ情報を伝達する方法です。
・使用例
まずはクライアント側の処理から。
※厳密にはサーバ側でも処理が行われますが、ここでは割愛します
グラフ上でイベント「MC_Overlap」を新規作成し、設定から「Replicates」を「Multicast」に変更します。
そして、追加したInputsピンを使用して数値を反映させるようにしましょう。
次にサーバ側の処理です。
Overlap関数は全環境で処理される為、サーバでのみ処理が実行されるよう判定を加えています。
あとは先程作成した「MC_Overlap」を呼び出すだけです。
上記の記事でも少し触れていますが
Actorの設定「NetCullDistanceSquared」の距離外に存在するアクターには情報が伝達されず
処理が一切行われない為、ご注意ください。
変数のReplication設定を利用し、RepNotify関数経由で情報を伝達する方法です。
・使用例
下記の画像内の順番で変数の作成、設定を行います。
次にクライアント側の処理です。
※厳密にはサーバ側でも処理が行われますが、ここでは割愛します
作成されたRepNotify関数「OnRep_ColorIndex」内に反映処理を追加します。
ここで、先程作成した変数を使用します。
最後にサーバ側の処理です。
先程追加された変数に値を入れるだけです。
ランダムな値を統一した上で、伝達、反映させる方法を2つご紹介しました。
今回はサーバ環境で値を確定させましたが
事前にどの環境から、どのように情報を伝達するのか設計してから
実装に取り掛かるようにしましょう。
本記事で説明し切れていないMulticastやRepNotifyの
より詳細な仕様や挙動に関しては
後述のリンク集にて掲載させていただいているスライドが
非常に分かりやすいので、是非併せてご覧ください。
「UE4 MultiPlayer Online Deep Dive: 実践編1」スライド(株式会社Byking様)
https://www.docswell.com/s/EpicGamesJapan/5WXDDZ-ue4-multiplayer-online-deep-dive-1-byking-ue4dd