サーバーとクライアント側のネットワークの同期~キャラの色の変更編~
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
やってます。
で、ネットワークの同期(PRC)がちょっとややこしいので得た知見をここに書きます。後々間違いに気づいて訂正するかも知れません。とりあえず出来たって感じで。
機能については詳しくかかないのでこれを見てください。
てことで色を変えます。
使用するもの
ThirdPersonキャラ
仕様
1を押すとServerだと赤、クライアントだと青に変更
エディター
プレイヤー数を1以上にするとネットワークのテストが出来ます。
サーバーとクライアントの色を変えます。
ThirdPersonCharacter
まずBeginPlayでMaterialInstanceを作成します。
LinearColor型の変数を作成します。
レプリケーションをRepNotifyにします。
そうするとOnRep_Colorの関数が出来ます。
この関数はColorの値が変更された時に走ります。
イベントグラフに戻りカスタムイベントを作成しました。そして1を押した際に呼び出されるようにします。
作成したカスタムイベントにSwitchHasAuhority(ServerかClientか判断する)ノードを設置しColor変数に色を入れます。
次に先程生成されたOnRepColor関数内に処理を入れます。
マテリアルインスタンスからSetVectorParameterValueノードを出しそこからColor変数を接続しました。
現時点で実行するとServer側のみ色が変わりました。
次にChangeColor_Serverというカスタムイベントを作成しました。
これはサーバーで実行、信頼性にチェックを付けました。
そしてこのカスタムイベントをRemoteに接続します。
これで各エディターで実行すると
以上です。
なんでこんな記事を書いたのか。それは記事の一枚目の画像だとクライアント側のキャラが座ってると思いますが、ルートモーションのフラグの変更を上記のノード構成で出来ましたし、キャラクターの上にあるServer、Clientの名前も同じようなノード構成だったので便利かな?と思い一応共有といった形です。
また新たな知見が生まれましたら書きます。それかこの記事を爆破します。
以上。