EnhancedInputのキーマッピング情報のデータ保存周りと入力アクションファイルに関して

お世話になっております。

ゲームパッドとキー入力含めたEnhancedInputに関して2点、質問、相談させて頂きたい事がございます。

1、EnhancedInputUserSettings情報セーブファイルに関して

現在、EnhancedInputUserSettings情報をSaveSettingsで保存しますと.sav形式で保存されますが

これをJson形式に変換し保存、管理を行いたく検証の方を行っているのですが既存機能としてUStruct形式をJsonに変換する

関数はエンジン側に用意されていますが(※FJsonObjectConverterクラス)

UObject、UClass形式をJsonに変換する機能は無く

必要ならこちら側で独自実装しなければならないと認識しておりますが確認させて頂きたく質問させて頂きました。

現状、認識通り独自実装しなければならないのか、それとも独自実装に限らず目的を達成する為に他に手段等ありましたら

教えて頂きたく存じます。

こちら側が考えている想定目標としましては

<セーブ>

.sav形式➔変換➔Json形式➔サーバーで管理

<ロード>

Json形式➔変換➔EnhancedInputUserSettingクラス形式に➔EnhancedInputUserSettingクラスに上書き

or

Json形式➔変換➔.sav形式

と言う形を想定しております。

※設計思想等は考慮しておらず現在のプロジェクト内での方針に沿った形であり

そもそもこちらの想定している設計、仕様は問題があるや上記以外に方法がありましたら遠慮なく教えて頂きたく存じます。

2、アクションファイルの入力判定について

マウスとゲームパッド用でそれぞれ

・IA_Act_Look ※画像参照「入力アクションファイルに関して1.PNG」

・IA_Act_PadLook ※画像参照「入力アクションファイルに関して2.PNG」

と言う「Axis2D(Vector2D)」設定の入力アクションファイルと用意し、

IMC_ActionListファイルには

・IA_Act_Look

・IA_Act_PadLook

を登録しマッピング設定を作成しております ※画像参照「入力アクションファイルに関して3.PNG」

その状態でBPで添付画像の様なノードを作成しますと ※画像参照「入力アクションファイルに関して4.PNG」

ゲームパッドのLookアクションを実行した際に当然「IA_Act_PadLook」の処理が実行されますが

本来はマウスでの操作時に実行されるはずの「IA_Act_Look」の処理も実行されます。

こちらの認識としましては入力アクションファイルの「ValueType」が同じものに関しては紐づけられた入力が

行われていなくても同じ設定の他動作が行われると実行されてしまう仕様になっているのでは。と考えておりますが

実際どういう仕組みになっているのか確認させて頂きたいのと発火した入力アクションのみを実行させる

方法について教えて頂けないでしょうか。

※上記実装を行ったサンプルプロジェクトを作成し添付予定なのですが別の問題が発生しており解消に時間が掛かりそうな為、先に文章のみになりご不便おかけ致します。

作成出来次第添付させて頂く予定です。

以上

宜しくお願い致します。

不明点や情報の追加要望等ありましたら

遠慮なくご連絡ください。

お世話になっております。

ご質問ありがとうございます。

ご質問1の件は別途調査を行うため回答まで少々お時間いただけますと幸いです。

ご質問2の件については、「IA_Act_Lookにマウスしかアサインしていないのであれば、たとえ同じValueTypeを持つ別アクションと紐づけられているのだとしても、ゲームパッドでIA_Act_Lookがトリガーされることはない」というのが仕様となっております。

頂戴したスクリーンショットを参考に、当方で検証するためのプロジェクトを作成しました。手元で実行した限りでは、想定通りの動作が確認できます。

■マウスを動かし、IA_Act_Lookを発火​[Image Removed]​

■ゲームパッドを動かしIA_Act_PadLookを発火。IA_Act_Lookは発火されない

[Image Removed]​

■マウスとゲームパッドの両方を動かす。それぞれのイベントは独立して発火し、値も別物になっている

[Image Removed]​

問題切り分けのために、一度添付のプロジェクトをダウンロードし、同じようなテストを行い、その結果をご共有いただけますと助かります。

以上、よろしくお願いいたします。​

お世話になっております。

返答ありがとうございます。

1、に関してはお手数お掛け致しますが

宜しくお願い致します。

2、に関しては頂いたテストプロジェクトを参考にこちらのプロジェクトの各設定を見直した

ところ、マウス、ゲームパッドでそれぞれ別アクションとして実行される事を確認致しました。

丁寧にテストプロジェクトを用意して頂きありがとうございました。

引き続き(1,)に関して、宜しくお願い致します。

お世話になっております。

お待たせいたしました。

質問1として頂戴していた件ですが、UObjectであってもFJsonObjectConverter::UStructToJsonObject()をお使いいただけそうです。

実際、エンジンにもUObjectを対象にUStructToJsonObject()を使用している例がありました。

そのうち、もっともシンプルなコードとして、UDMMaterialLayerObject::SerializeToString()のコードが参考にしやすいのではないかと存じます。

`FString UDMMaterialLayerObject::SerializeToString() const
{
TSharedPtr LayerJson = MakeShared();
FJsonObjectConverter::UStructToJsonObject(UDMMaterialLayerObject::StaticClass(), this, LayerJson.ToSharedRef());

FString SerializedString;
const TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&SerializedString);
FJsonSerializer::Serialize(LayerJson.ToSharedRef(), Writer);

return SerializedString;
}`以上、よろしくお願いいたします。