いとりのあんりある日記

アンリアルエンジンで自分がつまづいたところとかをかきます。不定期更新。

ブループリントのRPCイベントの使い分け備忘録

ネットワークゲーム作ってたので備忘録程度に。

カスタムイベントのRPCと、どんな感じで使うのとかです。

 

UE4ではカスタムイベントに三種類のRPC(リモートプロシージャコール、詳しいことはググってね)を設定でき、

・MultiCast

・Run On Server

・Run On Owning Clientのみっつがあります。

デフォルトは「NotReplicated(なにもしない)」になっているので、適宜設定しないといけません。

 

・MultiCast

ひとつめはマルチキャスト

f:id:Fire_rain:20190405140534p:plain

サーバーで呼び出しを行うと、サーバーとクライアントすべてで処理が実行。

多分一番よく使うであろうRPCイベント。

サーバー以外で呼び出してもそのクライアントでしか実行されない。

 

・RunOnServer

ふたつめはサーバーで実行。

f:id:Fire_rain:20190405141442p:plain

呼び出すと処理がサーバーで実行されます。呼び出したクライアントでは実行されません。

名前とは裏腹に、サーバーで呼び出しても、サーバーが所有するクライアントで処理が実行されます。

 

・RunOnOwningClient

最後は所有クライアントで実行。

f:id:Fire_rain:20190405141702p:plain

サーバーから呼び出した際、所有しているクライアントで処理が実行されます。

クライアントで呼び出しても、そのクライアントでしか実行されません。

使う機会は多くないんじゃないでしょうか。

 

・どんな感じで使うの

全員が見えていないといけない情報(キャラクターの色とか位置)の変更はマルチキャスト

サーバーが持っていればいい情報(残り時間とか)の変更はサーバーで実行、みたいな形で使い分けていけばいいと思います。

ただ、結構組み合わせて使わないといけない場面が多いです。

例えば自分のキャラクターの色(マテリアル)を変えたい場合、サーバー側からだとMultiCastのイベントひとつで済みますが、クライアント側からだとMultiCastしても自分にしか処理が走らないので、RunOnServerイベントからMultiCastイベントを呼ばないといけません。(僕がこの方法しか知らないだけで他の方法もあるかもしれません。)

f:id:Fire_rain:20190405143027p:plain

(こんな具合に)

 

 

ゲームモードはサーバー側にしか存在しないとか、ゲームインスタンスはそれぞれのクライアントにひとつずつあるとかも考えないといけないので慣れないとなかなか難しいところですが、逆に慣れてしまえば簡単にオンラインゲームを作れるようになれます。

 

ちょっとオンラインとか興味あるな~みたいな人はぜひ挑戦してみてはどうでしょうか。