僕の私のUnrealな日々

UE4のBluePrintを使って小さなギミックを作ったりしてます。ブログを通じて情報共有ができたらなと思います。

サーバーとクライアント側のネットワークの同期~キャラの色の変更編~

 

f:id:Bussan_dayo:20170820015449p:plain

 

 

 

 やってます。

 

で、ネットワークの同期(PRC)がちょっとややこしいので得た知見をここに書きます。後々間違いに気づいて訂正するかも知れません。とりあえず出来たって感じで。

 

 

機能については詳しくかかないのでこれを見てください。

docs.unrealengine.com

 

 

てことで色を変えます。

 

使用するもの

ThirdPersonキャラ

 

仕様

1を押すとServerだと赤、クライアントだと青に変更

 

 

エディター

プレイヤー数を1以上にするとネットワークのテストが出来ます。

f:id:Bussan_dayo:20170820014323p:plain

 

 

サーバーとクライアントの色を変えます。

f:id:Bussan_dayo:20170820014801p:plain

 

ThirdPersonCharacter

まずBeginPlayでMaterialInstanceを作成します。

f:id:Bussan_dayo:20170820015039p:plain

 

 

 LinearColor型の変数を作成します。

f:id:Bussan_dayo:20170820015134p:plain

 

レプリケーションをRepNotifyにします。

f:id:Bussan_dayo:20170820015200p:plain

 

 

そうするとOnRep_Colorの関数が出来ます。

f:id:Bussan_dayo:20170820015244p:plain

 

この関数はColorの値が変更された時に走ります。

 

イベントグラフに戻りカスタムイベントを作成しました。そして1を押した際に呼び出されるようにします。

f:id:Bussan_dayo:20170820015643p:plain

 

 

 

作成したカスタムイベントにSwitchHasAuhority(ServerかClientか判断する)ノードを設置しColor変数に色を入れます。

f:id:Bussan_dayo:20170820015817p:plain

 

 

次に先程生成されたOnRepColor関数内に処理を入れます。

マテリアルインスタンスからSetVectorParameterValueノードを出しそこからColor変数を接続しました。

f:id:Bussan_dayo:20170820020152p:plain

 

 

現時点で実行するとServer側のみ色が変わりました。

f:id:Bussan_dayo:20170820015948p:plain

 

 

次にChangeColor_Serverというカスタムイベントを作成しました。

これはサーバーで実行、信頼性にチェックを付けました。

f:id:Bussan_dayo:20170820020417p:plain

 

 

そしてこのカスタムイベントをRemoteに接続します。

f:id:Bussan_dayo:20170820020759p:plain

 

これで各エディターで実行すると

f:id:Bussan_dayo:20170820022206p:plain

 

 

 

以上です。

f:id:Bussan_dayo:20170820020902p:plain

 

なんでこんな記事を書いたのか。それは記事の一枚目の画像だとクライアント側のキャラが座ってると思いますが、ルートモーションのフラグの変更を上記のノード構成で出来ましたし、キャラクターの上にあるServer、Clientの名前も同じようなノード構成だったので便利かな?と思い一応共有といった形です。

 

 

f:id:Bussan_dayo:20170820021310p:plain

 

 

また新たな知見が生まれましたら書きます。それかこの記事を爆破します。

 

以上。