前回、スタティックメッシュアクターのコンポーネントからマテリアルの参照を取得しました。今回はコンポーネントに指定されているスタティックメッシュアセットから参照を得てみます。
Static Mesh から情報を取得する
マテリアル情報を得るボタンのクリックイベントの実装の続きです。
軽くおさらいすると、取得した情報を保持しておくための String
型の配列「MaterialInfoArray」をまずクリアして、レベル上で選択中のアクターから1つだけ取り出して「Static Mesh Actor」にキャストしています。
前回でマテリアルの取得の流れは掴めているかと思いますが、ここからも同じ流れです。
📗 Get Material
アクターにキャストしてからコンポーネントを取得し、さらに「📘 Get Static Mesh」でスタティックメッシュのアセットが持つ情報にアクセスできるようにしてから「📗 Get Material」に繋いでマテリアルの情報を取得します。
そして配列にマテリアル名を格納します。図の例は先頭のスロットのマテリアル名が対象です。
BP を実行してボタンを押し、コンポーネント側でオーバーライドしたマテリアルではなく、元のスタティックメッシュアセット側に設定されたマテリアル名が取得できていることを確認します。
📗 Get Number Materials
「📗 Get Number Materials」関数は名前の通りマテリアルの数を取得しますが‥
コンパイルするとエラーが出ます。
エラーの内容は「このブループリント(Self)は Static Mesh Subsystem ではありません」「Target に接続が必要です」と表記されています。
そこでノード検索から「Static Mesh Editor Subsystem」を追加して‥
「Target」に接続してコンパイルします。するとエラーは解消されました。
BP を実行してマテリアル数が取得できているのを確認します。
📗 Get Number Materials と 📗 Get Material を組み合わせる
図のように組んで、メッシュが持つマテリアル名を全て配列に格納してみます。
BP を実行して2つのマテリアル名が表示されました。
スタティックメッシュを開けば、ちゃんと一致していることが確認できます。
📗 Get Material Index
「📗 Get Material Index」はスロット名で Index を返す関数です。図は「SlotB」という名前で Index を得てから Index を指定してマテリアル名を取得しています。
BP を実行して「CubeMaterial2」が表示されましたが‥
スタティックメッシュを開いてスロット名「SlotB」を確認すると、指定されているマテリアルとちゃんと一致しています。