UE4:リッスンサーバーでの通知BPの挙動~足音編~
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
最近サウンドを入れ始めました。
攻撃エフェクトのマルチのテストを行ないました。サウンドも徐々に入っていい感じです!(作業者:@Bussan_desu(実装),@tekk_private (サウンド)) #UE4 #EpicFriday #ChaosOfWar pic.twitter.com/OqD3FMamoF
— DobullDogsStudio (@DDogsStudio) 2018年2月16日
で、足音をいれるため通知BPを作成し、音を鳴らすことに。
すると、音が複数回なることに気づく。クライアントを3人で行うとクライアントで歩いた際に4重になって音が聞こえる。
調べて見るとデディケートサーバーだとうまくいくらしい。
困っているとそこに
それはね、サーバーとクライアントで実行されるからだよ
— ゆういち (@nullpodesu) 2018年2月13日
なるほど。
— ゆういち (@nullpodesu) 2018年2月13日
問題の箇所を見せてもらえたらさくっとわかりそうな気がしますね。
てことで相談すると、
アニメーション通知はマルチキャストと同じ挙動になるとおもうので、クライアントからサーバーで実行してレプリケートの仕組みを作るか、各々のローカルだけで再生するための通知を出すかを振り分けたら解決するはずです
なるほど・・・・。
続きを読む
12,1月の製作進捗
お疲れ様です。
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
作ってます。
11月から色々とありエフェクトデザイナー、レベルデザイナーの参加で計4人になりました。 ありがたいです。
団体のTwitterが出来ました。
はじまり
— DobullDogsStudio (@DDogsStudio) 2018年1月20日
エフェクト周りですが、デザイナーが2人になり本格的に作業が進み始めました。
そこで早速求められた物がエフェクト動作をチェックするツールです。
その為パーティクルチェッカーと言うものを作成しました。
動作としてはエフェクトを設定し終了条件を設定、終了後次のエフェクトのスポーン及びなかった場合終了というものです。
動作パターンも幾つか作成しました。ただスポーンするだけのエフェクト、直線運動、放射型、ソケット配置型などです。設定を選択肢、終了条件を入れます。例えば何秒後やオブジェクトに当たったらや、終了後何秒後にエフェクトを消すかなど様々です。
続きを読む
UE4:コンポーネントに設置したSkeltalMeshのメッシュを動的に変えるとサーバーとクライアントで同期されない
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
作ってる最中にそういった問題があったので、テストプロジェクトで検証
スケルタルメッシュを設置
ジャンプしたら頭の上にあるスケルタルメッシュのMeshを変更したい。
何も考えずに行うと
サーバー側で処理を行っても同期はされない
サーバーやクライアント関係なく同期はされない。ということで処理を組んでいく。
最初サーバーで実行した後にイベントを発生させる
この場合だとサーバーにはすべて見えるがとクライアント側だと何も見えていない・・・
色々と検証した所、最初の処理をサーバーで実行、それをマルチキャストで拡散し、処理を行う。
同期が出来た。
サーバーとクライアント1の同期、クライアント1とクライアント2の同期も出来ていた。
的なメモブログ
今後も何かアレば書いていこうと思います。
------
11月進捗:ネットワーク、クラフトシステムとスポーン、乗車のマルチ
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
てことでやってます。
今月行ったことは
・ネットワーク処理の移植
・クラフトシステム とアイテムのスポーン処理
・車4人乗り
となります。
UIは仮となります。
・ネットワークの移植について
これは以前作成したテストプロジェクトから処理を移植したものです。
一回目に通信成功した時にノートのエディタがクラッシュしたんだけどそれが悪さしてたっぽく再起動で通信できた....やっとスタートラインにこぎつけたぞ.... pic.twitter.com/ntsyL7bQjv
— ぶっさん (@Bussan_desu) 2017年8月18日
ただWidgetを作り直して処理を移しただけですが、部屋の作成、検索が動かないだったりしました。部屋の作成検索はエディターを立ち上げたら治ったりと意味不明な部分もありました。部屋が検索出来てJoinも成功したのにレベル移動がされないこともありました。
部屋の作成について
MemberCountに参加人数を設定してAcceptを押すと
GameinstanceのLaunchLobbyに飛ぶようにしました。CountNumは先程設定した参加人数です。
GameInstanceのLaunchLobby関数内も以下のようになっています。とてもシンプル・・・
部屋の参加について
Joinボタンを押すと以下のようになっています。
FindSessionから出たSessionResult配列を一度FindSession関数で処理を入れていますがこれは部屋検索の条件を関数内で行っています。
今回はとりあえず一部屋のみ作成しているのでなので直繋ぎです。
GameInstanceのJoinServer関数に関しては以下のとおりです。
とてもシンプル
その場合はGamemodeの設定でGamoMode>UseSeamlessTravelにチェックを付けると飛びました。このあたりの設定は忘れない方が良さそうですね。
移動前レベルで設定した衣類に関してはやっかいなのでいつか書きます。
・ クラフトシステムに関して
これは持ち物からクラフトできるものをリスト化し、クラフトを行える処理です。
基本的に設定方法はテーブルで管理しており、
これがアイテムのテーブル。
そしてこれがクラフトアイテムの作成条件のテーブルです。
なぜテーブルを分けたかというとリスト化する際に条件を全検索するため処理がかからないようにするためです。あと管理しやすさ。
処理に関してですが、画像からわかるように子Widgetを多用しており子Widgetの中に子Widgetを入れてその中に子Widgetを入れていたりして書くにはやっかりなので割愛です。
・アイテムのスポーンについて
まず置く場所を決めるプレビューActorがあり、位置を決めてるとホストとクライアントが同期されるようになっています。
処理に関してはおわかりのとおりです
プレビュー用
スポーン処理
クライアント側のレプリケーション処理
作成した関数が多いため詳しくは割愛。いつか気力が出たらきっちり書きたいと思います。
・車の乗車下車のマルチ対応
以前作成した実験用のBPは作り直し再度親のクラスを作成しました。
それを継承した車のActorがこちら
乗車時に乗車キャラをスポーンしてPossessにて操作キャラを変更しています。
乗車時の処理
キャラスポーン時
乗車中の処理
いつか詳しくブログにかければと思います。気力が出れば。
まだビジュアル周りの事に手を出せていないので早くそっちに行けるようにしたいですね。
以上です。
進捗報告2
お疲れ様です。
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
今月の進捗を書こうと思います。
ネットワークのキャラのアニメーションのレプリケーション周りわかって来た。今の所完全なるパターンを見つけたのでもう怖くない。僕らはもう一人じゃない
— ぶっさん (@Bussan_desu) 2017年9月24日
鯖とクライアントのアニメーションのテストをしていました。全然作り込んではいませんが・・・。大体処理方法は把握出来たので次はダメージ周りの調査をしようと思います。https://t.co/O1BbhcIA7O #EpicFriday
— ぶっさん (@Bussan_desu) 2017年9月29日
アニメーションに通知を入れてAnimNotifyでコントローラーのWidget出す関数を呼び出すとクライアントにすべてに同期されるので結局バインドで出すことに pic.twitter.com/h8iaC8Q3Vy
— ぶっさん (@Bussan_desu) 2017年10月19日
一応進めてます。
一応アニメーション同期周りやダメージ周りの検証を一通り終えたので少しづつ実装を行っています。最近メンタルが崩壊しかけたのでジムに通っているため進みが遅いです。あともう少し仕様を固めないと後々困りそうですね。
何か知見が出来たらまた記事にしようと思います。(ただネットワーク周りの説明がしんどいので思っているだけですが。)
てことで来月も頑張ります。
※協力してくれる暇人の方募集中です。
アイディア出しのブレインストーミングを一緒にしてくれる方など。
以上
進捗報告1
始めて一ヶ月が経ちました。
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
仮名をChaosOfWar。プロジェクトコードネームとして牛(Cow)と読んでいます。とっても変えたい。動画などでちょくちょくChaosのスペルミスがありますが、気にしないでください。学がないだけです。
進捗報告
行ったこととしてまずルームの作成、クライアントの参加の処理テストです。
一回目に通信成功した時にノートのエディタがクラッシュしたんだけどそれが悪さしてたっぽく再起動で通信できた....やっとスタートラインにこぎつけたぞ.... pic.twitter.com/ntsyL7bQjv
— ぶっさん (@Bussan_desu) 2017年8月18日
最低限のテストが出来ましたので、身体の色などを変更した場合にどういった処理を組むことにより同期が行われてるかのテストとなります。このことについては記事にまとめました。
次に行ったのはPlayerの操作権限を他のキャラクター、及びPawnに移した場合の検証となります。テスト方法としましてはバイクを用意し二人乗りの実装を行いました。
最後に、キャラクターの衣類の変更などが出来るような処理を作成しました。これはネットワークではなくルームの作成参加を行う前出来る機能となります。
CharacterCreate2から持ってきたモデルをMayaLTで髪、上半身、下半身、靴に分けキャラクターBPのコンポーネントに4つのスケルタルメッシュを設置し、そこにぶっこんでいく処理方法です。ネットワークの処理の組み方がめんどくさすぎてシングルプレイは楽に感じたのですが、素材のインポートがめんどくさすぎて辛い思いをしました。(服のスクショやらそれぞれの身体のパーツを持ってきたり・・・)
来月はアイテムや武器の取得及びそれに伴うアニメーションの検証を行います。
UI周りは作らないので素材インポートという面倒くさい作業もないためスピードは上がる気がします。
ネットワークの概念が理解できて来たのでトラブルが起きても冷静に対処。これが進化論における猿が棒を使えるようになるという事か....ウホウホ🐵🐵
— ぶっさん (@Bussan_desu) 2017年9月15日
ご期待下さい。
以上
サーバーとクライアント側のネットワークの同期~キャラの色の変更編~
やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@Bussan_desu) 2017年8月16日
やってます。
で、ネットワークの同期(PRC)がちょっとややこしいので得た知見をここに書きます。後々間違いに気づいて訂正するかも知れません。とりあえず出来たって感じで。
機能については詳しくかかないのでこれを見てください。
てことで色を変えます。
使用するもの
ThirdPersonキャラ
仕様
1を押すとServerだと赤、クライアントだと青に変更
エディター
プレイヤー数を1以上にするとネットワークのテストが出来ます。
サーバーとクライアントの色を変えます。
続きを読む