読者です 読者をやめる 読者になる 読者になる

Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 ソケットのアタッチをノードを使わずに行う

UE Tips

UE4ではソケットという機能を使うことで、ボーンとは別のジョイントロケーション情報を追加することができます。スケルタルメッシュで利用する際には以下のドキュメントがそのまま役にたつはずです。

docs.unrealengine.com

まずはペルソナからソケットを追加し、そのままソケット上にプレビューアセットを追加すれば一時的にスケルタルメッシュに小物を持たせたりができるようになります。これは永続的なものではないので、2種類の方法を使ってゲーム中にソケットにアタッチさせる方法があります。

今回はよくハマりがちな部分と、ブループリント上での特殊なアタッチ方法についてを解説します。

レベル配置済みスケルタルメッシュにアタッチする

レベルに配置済みのスケルタルメッシュには簡単にアタッチが可能です。

f:id:alwei:20161122154126p:plain

アウトライナー上からアタッチしたいメッシュをアタッチするスケルタルメッシュにドラッグ&ドロップします。ここで注意点として、アタッチする側の可動性(Mobility)を"Movable"に変更しておかないとここから先の操作がでてこないので注意が必要です。

f:id:alwei:20161122154515p:plain

これでドロップダウンメニューが出現するので、ボーン&ソケット一覧からアタッチしたいボーン、もしくはソケットを選択します。

f:id:alwei:20161122154656p:plain

これで無事スケルタルメッシュへとメッシュがアタッチされました。少しだけ特殊な方法ですが、ゲーム中に永続的にアタッチしてくれます。

ブループリント上でノードを使わずにアタッチする

意外とというか全く知られていない方法がこれ。ほとんどの場合、ブループリント上でアタッチする場合には"AttachTo"系のノードを使うことが一般的になっています。というかドキュメントにもそうするように書かれています。しかも上記で解説した方法ではレベル上に配置したブループリントコンポーネントとなっているスケルタルメッシュではアタッチがなぜかできません。

一般的にはコンストラクションスクリプトなど、ゲームが開始と共に実行されるタイミングでアタッチするのが定石な手段として知られていますが、実は恒常的にアタッチさせる方法が存在しています。

f:id:alwei:20161122155834p:plain

まずはブループリントのコンポーネント階層上にアタッチさせたいメッシュをコンポーネントとして追加します。更にアタッチをする側のスケルタルメッシュコンポーネントにドラッグ&ドロップし、親と子の関係になるようにします。またその際に"Location"と"Rotation"情報が相対位置へと変更されるので、これをどちらとも全て"0"に戻すようにしておいてください。

f:id:alwei:20161122160219p:plain

ここが非常にわかりにくいところです。アタッチさせたいメッシュコンポーネントを選択し、"Parent Socket"という項目に注目します。通常この項目はグレーアウトされており、弄れそうにないのですがなんとその右にある虫メガネアイコンを選択することができます。

f:id:alwei:20161122160511p:plain

これでレベル配置済みスケルタルメッシュと同様の方法でアタッチが可能になります。ノードによるアタッチ作業は一切必要ありません。

f:id:alwei:20161122160838p:plain

ビューポート上でアタッチされているのが確認できるようになっています。ノードからしかアタッチできないというイメージが強かったかもしれませんが、この方法であれば一切の事前処理が不要でブループリント上にてキャラクターに武器などの小物を持たせることができるようになります。