やっぱり何でもありの複数人対戦ゲーム作りたくなったので少しづつ作るよ。ステージにある武器や魔法スキルや素材を拾って銃乱射したり魔法使ったりクラフトしたりしたいね。召喚獣とか出したいね。協力してくれる人常に募集してるから助けてね。でもこれ結構しんどいね。
— ぶっさん (@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にて操作キャラを変更しています。
乗車時の処理
キャラスポーン時
乗車中の処理
いつか詳しくブログにかければと思います。気力が出れば。
まだビジュアル周りの事に手を出せていないので早くそっちに行けるようにしたいですね。
以上です。