お世話になっております。
Mutableプラグインにて仕様か不具合かわからない事象がありましたのでご確認させていただきたいです。
【概要】
MutableエディタのUI生成ロジック(FCustomizableInstanceDetails)において、特定の階層構造を持つインスタンスパラメータが詳細パネルに表示されなくなる事象を確認しました。
この問題は、「中間の親となるObject Group」がUIパラメータを持たない設定(Group Type: “All Options”)であり、かつその「子となるObject Group」がUIを表示する設定(Group Type: “Toggle”)である場合に発生します。
【事象の詳細】
この階層構造では、最下層にあるパラメータ(例:Float Parameter等)およびその親である「Toggle」設定のグループ自体が、詳細パネルのリストから完全に消失します。
また、UIの更新における不整合も確認しています。中間の親を一度 “Toggle” に変更してコンパイルし、再度 “All Options” に戻すと、最下層のパラメータだけが孤立して表示されることがありますが、その直接の親である “Toggle” グループは非表示のままとなるなど、表示状態が不安定になります。
添付画像にて、この表示不良の様子をご確認いただけます。
- [画像1, 2, 3: 修正前の表示不良]
- これらの画像では、詳細パネルに「Head」と「Body」のパラメータのみが表示されており、本来表示されるべき「Acc」グループおよび「AccParam」がリストに一切存在しません。
[Image Removed]
【原因の推測】
FCustomizableInstanceDetails::GenerateParametersView 内から呼ばれるロジックの不備と思われます。
FillChildrenMap メソッドが子要素の __ParentParamName メタデータを読み取る際、親が描画処理を行うことを前提として、無条件で ParamHasParent = true と設定しています。
しかし、親が “All Options” の設定によってUIパラメータを持たない場合、親が ParametersTree に存在しないため、子要素への再帰的な描画(Draw呼び出し)が実行されず、結果として非表示になってしまいます。
【修正案】
FillChildrenMap を修正し、親パラメータが現在の表示リスト(ActiveParameterNames)に実際に存在するかどうかを確認した上で、子要素フラグを設定するようにすることで解決できると考えています。
void FCustomizableInstanceDetails::FillChildrenMap(int32 ParamIndexInObject, const TSet<FString>& ActiveParameterNames)
{
const UCustomizableObject* CustomizableObject = CustomInstance->GetCustomizableObject();
const FString& ParamName = CustomizableObject->GetParameterName(ParamIndexInObject);
FMutableParamUIMetadata UIMetadata = CustomizableObject->GetParameterUIMetadata(ParamName);
if (const FString* ParentName = UIMetadata.ExtraInformation.Find(FString("__ParentParamName")))
{
// FIX: Only register as a child if the parent parameter is actually going to be drawn
if (ActiveParameterNames.Contains(*ParentName))
{
ParamChildren.Add(*ParentName, ParamIndexInObject);
ParamHasParent.Add(ParamIndexInObject, true);
}
}
}
修正案を適用した結果が、以下の画像となります。
- [画像4, 5, 6: 修正案適用後の正常な表示]
- 修正後は、期待通り「Acc」グループおよび「AccParam」が詳細パネルに表示され、操作可能になっていることが確認できます。
[Image Removed]
【確認事項】
このようなインスタンスパラメータの表示制限は、Mutableの現在の仕様によるものでしょうか?
それとも意図しない不具合(バグ)でしょうか?
バグである場合、「修正案」の方法でよいでしょうか?
また、今後のアップデートでの修正がございますでしょうか?
ご確認のほど、よろしくお願いいたします。
[Attachment Removed]