お世話になっております。
やりたい事といたしましては、
例えば、BPにA、B、Cと言う名前のStaticMeshComponentをアタッチしているとし、
それをレベル上に複数個配置致します。
配置されたレベル上のBPアクターをいくつか選択し、
エディタ拡張等で「A」ボタンを押したら、
名前AのStaticMeshComponentが全て選択対象となるような機能が欲しい状況です。
C++側から、GEditor->SelectComponent を使用して、強制的に選択対象にしてみたのですが、
1つしか選択候補にならないようです。
上記の様な事をやりたい場合に、何かしたら良い手法はございますでしょうか?
お世話になっております。
まず表題の「特定のコンポーネントを同時に編集する」というのは、対象となるComponentがDefaultObjectでない場合(C++から追加されたDefaultObjectではなくBlueprint上から追加されたComponent)は複数のアクターを同時に編集することはエンジンをカスタマイズしない限りできないものと思われます。DefaultObjectで無いComponentを複数アクター選択した場合、UI上に表示する機構から存在していないためです。これを解決するにはEditorのDetailパネルを表示する箇所からカスタマイズして頂く必要があるかと思います。
次に複数のComponentを選択するためには、 SActorDetails::OnSCSEditorTreeViewSelectionChanged()
の引数SelectedNodesに対象となるComponentを含むNodeを渡すことができれば実現できるかもしれません。これは上記で申しましたように「Detailパネル(もしくはPropertyMatrix)から複数のComponentを同時に編集する」ために「DefaultObjectとして定義したComponent」を含むことが前提となります。この処理については、DetailパネルでCtrl+Aを押した際の挙動が参考になるかと思います。
複数のActorを選択して方法については、選択Actorを一括選択するコマンドShift+Ctrl+A( ACTOR SELECT OFCLASS CLASS=XXX
)で実行される UUnrealEdEngine::edactSelectOfClass
や
選択StaticMeshActorを一括選択するコマンド( ACTOR SELECT MATCHINGSTATICMESH ALLCLASSES
)を実行する UUnrealEdEngine::edactSelectMatchingStaticMesh
が参考になるかと思いますが、Componentを同時に編集する方法について制限がありますので、単にSelectComponentで選択するだけでなく、この点も踏まえて実装をご検討頂く必要がございます。
ご参考になれば幸いです。
詳細なご説明誠にありがとうございます。
結構改修箇所が多くなりそうですね…。
エンジン改造までの対応にはしたく無いという温度感ではありますので、
ご教示いただいた箇所を調査してみて、
無理そうでしたら、決め打ちの編集を行う様なエディタ拡張を検討してみたいと思います。
ご返答ありがとうございました。