僕の私のUnrealな日々

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

UE4:コンポーネントに設置したSkeltalMeshのメッシュを動的に変えるとサーバーとクライアントで同期されない

 

 

 

作ってる最中にそういった問題があったので、テストプロジェクトで検証

 

f:id:Bussan_dayo:20180118020702p:plain

 

 

 スケルタルメッシュを設置

 

ジャンプしたら頭の上にあるスケルタルメッシュのMeshを変更したい。

何も考えずに行うと

サーバー側で処理を行っても同期はされない

f:id:Bussan_dayo:20180118021134p:plain

サーバーやクライアント関係なく同期はされない。ということで処理を組んでいく。

 

 

最初サーバーで実行した後にイベントを発生させる

f:id:Bussan_dayo:20180118021428p:plain

f:id:Bussan_dayo:20180118021343p:plain

 この場合だとサーバーにはすべて見えるがとクライアント側だと何も見えていない・・・

 

色々と検証した所、最初の処理をサーバーで実行、それをマルチキャストで拡散し、処理を行う。

 

 

f:id:Bussan_dayo:20180118021905p:plain

 

 

同期が出来た。

f:id:Bussan_dayo:20180118021944p:plain

サーバーとクライアント1の同期、クライアント1とクライアント2の同期も出来ていた。

 

 

的なメモブログ

今後も何かアレば書いていこうと思います。

 

 

------

 

 

11月進捗:ネットワーク、クラフトシステムとスポーン、乗車のマルチ

 

 

てことでやってます。

今月行ったことは

 ・ネットワーク処理の移植

 

 

・クラフトシステム とアイテムのスポーン処理

 

 

・車4人乗り 

 

となります。

 

UIは仮となります。 

 

・ネットワークの移植について

これは以前作成したテストプロジェクトから処理を移植したものです。

 

 

 

 

ただWidgetを作り直して処理を移しただけですが、部屋の作成、検索が動かないだったりしました。部屋の作成検索はエディターを立ち上げたら治ったりと意味不明な部分もありました。部屋が検索出来てJoinも成功したのにレベル移動がされないこともありました。

 

f:id:Bussan_dayo:20171126170131p:plain

 

部屋の作成について

MemberCountに参加人数を設定してAcceptを押すと

f:id:Bussan_dayo:20171126170219p:plain

 

GameinstanceのLaunchLobbyに飛ぶようにしました。CountNumは先程設定した参加人数です。

GameInstanceのLaunchLobby関数内も以下のようになっています。とてもシンプル・・・

f:id:Bussan_dayo:20171126170412p:plain

 

部屋の参加について

Joinボタンを押すと以下のようになっています。

f:id:Bussan_dayo:20171126170546p:plain

 

FindSessionから出たSessionResult配列を一度FindSession関数で処理を入れていますがこれは部屋検索の条件を関数内で行っています。

今回はとりあえず一部屋のみ作成しているのでなので直繋ぎです。

f:id:Bussan_dayo:20171126170720p:plain

 

GameInstanceのJoinServer関数に関しては以下のとおりです。

とてもシンプル

f:id:Bussan_dayo:20171126170841p:plain

 

 その場合はGamemodeの設定でGamoMode>UseSeamlessTravelにチェックを付けると飛びました。このあたりの設定は忘れない方が良さそうですね。

f:id:Bussan_dayo:20171126165959p:plain

 

移動前レベルで設定した衣類に関してはやっかいなのでいつか書きます。

 

 

・ クラフトシステムに関して

 

f:id:Bussan_dayo:20171126171100p:plain

 

 これは持ち物からクラフトできるものをリスト化し、クラフトを行える処理です。

 

基本的に設定方法はテーブルで管理しており、

 これがアイテムのテーブル。

f:id:Bussan_dayo:20171126171212p:plain

 

 そしてこれがクラフトアイテムの作成条件のテーブルです。

f:id:Bussan_dayo:20171126171312p:plain

 

なぜテーブルを分けたかというとリスト化する際に条件を全検索するため処理がかからないようにするためです。あと管理しやすさ。

 

処理に関してですが、画像からわかるように子Widgetを多用しており子Widgetの中に子Widgetを入れてその中に子Widgetを入れていたりして書くにはやっかりなので割愛です。

f:id:Bussan_dayo:20171126171501p:plain

 

・アイテムのスポーンについて

まず置く場所を決めるプレビューActorがあり、位置を決めてるとホストとクライアントが同期されるようになっています。

f:id:Bussan_dayo:20171126171920p:plain

 

f:id:Bussan_dayo:20171126171952p:plain

 

処理に関してはおわかりのとおりです

f:id:Bussan_dayo:20171126172211p:plain

 

プレビュー用

f:id:Bussan_dayo:20171126172249p:plain

 

 スポーン処理

f:id:Bussan_dayo:20171126172327p:plain

 

クライアント側のレプリケーション処理

f:id:Bussan_dayo:20171126172355p:plain

 

作成した関数が多いため詳しくは割愛。いつか気力が出たらきっちり書きたいと思います。

 

・車の乗車下車のマルチ対応

以前作成した実験用のBPは作り直し再度親のクラスを作成しました。

f:id:Bussan_dayo:20171126172713p:plain

 

それを継承した車のActorがこちら

f:id:Bussan_dayo:20171126172809p:plain

 

 

乗車時に乗車キャラをスポーンしてPossessにて操作キャラを変更しています。

乗車時の処理

f:id:Bussan_dayo:20171126173129p:plain

 

キャラスポーン時

f:id:Bussan_dayo:20171126172952p:plain

 

 

 乗車中の処理

f:id:Bussan_dayo:20171126173157p:plain

 

いつか詳しくブログにかければと思います。気力が出れば。

 

 

まだビジュアル周りの事に手を出せていないので早くそっちに行けるようにしたいですね。

 

以上です。

 

 

 

 

進捗報告2

 

 

お疲れ様です。

 

 

今月の進捗を書こうと思います。

 

 

 

 

 

 

 

一応進めてます。

 

一応アニメーション同期周りやダメージ周りの検証を一通り終えたので少しづつ実装を行っています。最近メンタルが崩壊しかけたのでジムに通っているため進みが遅いです。あともう少し仕様を固めないと後々困りそうですね。

 

何か知見が出来たらまた記事にしようと思います。(ただネットワーク周りの説明がしんどいので思っているだけですが。)

 

 

てことで来月も頑張ります。

 

 

※協力してくれる暇人の方募集中です。

アイディア出しのブレインストーミングを一緒にしてくれる方など。

 

以上

 

 

 

 

 

進捗報告1

 

f:id:Bussan_dayo:20170916160224p:plain

 

 

始めて一ヶ月が経ちました。

 

 

 仮名をChaosOfWar。プロジェクトコードネームとして牛(Cow)と読んでいます。とっても変えたい。動画などでちょくちょくChaosのスペルミスがありますが、気にしないでください。学がないだけです。

 

進捗報告

 行ったこととしてまずルームの作成、クライアントの参加の処理テストです。

 

 

 

 

最低限のテストが出来ましたので、身体の色などを変更した場合にどういった処理を組むことにより同期が行われてるかのテストとなります。このことについては記事にまとめました。

 

unrealbussan.hatenablog.com

 

次に行ったのはPlayerの操作権限を他のキャラクター、及びPawnに移した場合の検証となります。テスト方法としましてはバイクを用意し二人乗りの実装を行いました。

 

 

 

 

 

 

 最後に、キャラクターの衣類の変更などが出来るような処理を作成しました。これはネットワークではなくルームの作成参加を行う前出来る機能となります。

 

 

 

CharacterCreate2から持ってきたモデルをMayaLTで髪、上半身、下半身、靴に分けキャラクターBPのコンポーネントに4つのスケルタルメッシュを設置し、そこにぶっこんでいく処理方法です。ネットワークの処理の組み方がめんどくさすぎてシングルプレイは楽に感じたのですが、素材のインポートがめんどくさすぎて辛い思いをしました。(服のスクショやらそれぞれの身体のパーツを持ってきたり・・・)

 

 

来月はアイテムや武器の取得及びそれに伴うアニメーションの検証を行います。

UI周りは作らないので素材インポートという面倒くさい作業もないためスピードは上がる気がします。

 

ご期待下さい。

 

以上

 

 

 

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

 

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

続きを読む

マテリアル探求1

 

久々にいじって遊んでました。

 

f:id:Bussan_dayo:20170712000542p:plain

 

 

f:id:Bussan_dayo:20170712000517p:plain

 

UE4のテクスチャーはエンジン内に入っているものなのでコンテンツブラウザの表示オプションからエンジンコンテンツを表示、UE4_Logoで検索すると出てきます。

 

かなり久々に触ったのですが少しづつ色々と思い出してきました。これからちょくちょく触っていきます。

 

また何かできたら報告します。次はこんな単純なものではなくいい感じのやつを・・・。

 

ウンオッケー(b*ゝvƠ)=☆

 

以上。 

UE4:[C++]ActionMappingの取得

アクションマッピングで設定したキーをC++で呼び出します。
色々と調べながらなのでアレかもしれません。動きはしました。
BPに慣れすぎるとコンパイル時間が長く感じますね。効率が悪い。


input.h

private:
	UInputComponent* InputComponent = nullptr;
	
	void InputEvent();
input.cpp


void UInput::BeginPlay()
{
	Super::BeginPlay();

	//入力を取得
	InputComponent = GetOwner()->FindComponentByClass<UInputComponent>();


       //取得できた場合の処理
	if(InputComponent){
		InputComponent->BindAction("InputMappings", IE_Pressed, this, &UInput::InputEvent);
	}
	// ...
	
}

void UInput::InputEvent()
{
	UE_LOG(LogTemp, Warning, TEXT("入力ゲット!"))
}


このブログはBPのみとしたいので近々他のブログに移すと思います。