【UE4】特定のアクターをSweepチェックの対象外にする

2021年2月22日

アクターのSweep移動について

UE4ではアクター(オブジェクト)を移動させる時に、他の物体にめり込まない様にするSweepチェックが実装されています。
これは手軽に当たり判定を取ってくれるとても便利な機能なのですが、普通に使うだけだとコリジョン設定でBlockになっている物体の前で止まってしまう為、箱などの小物を蹴散らしたりすることができずに困ってしまう場合があります。

下の画像の様にツインスティックシューターテンプレートで自機を移動させてみます。
すると壁にめり込まないのは非常に助かるのですが、小さな箱の前でも止まってしまいます。

壁で止まってくれる
障害物の前でも止まってくれるが、この物体は吹き飛ばしたい。

ゲームによってはこれでいいかもしれませんが、こういう場面では箱を吹き飛ばしてくれた方が気持ちよさそうです。
この問題を解消してくれるノード(関数)があるのでご紹介します。

Ignore Actor when Moving

これを使うとアクターの移動時に、指定したアクターとの当たり判定を取らないようにすることができます。

  • ターゲット – 当たり判定を無視させたいコンポーネント(今回の場合はアクターのルートコンポーネント)
  • Actor – 当たり判定を取りたくないアクター
  • Should Ignore – 当たり判定を無視するか(ON/OFF)

ターゲットには、ルートコンポーネントの他に当たり判定を無視させたいコリジョンがあれば指定することもできます。

今回の場合でいうと、箱には衝突してほしい(物理挙動で吹き飛んで欲しい)のでBLOCK設定は外せません。
ですが移動時のSweepテストでは立ち止まらずに突き進んで欲しいので、Ignore Actor when Moving が役に立ちます。
これを利用すれば、例えばパワーアップ中だけ押し出せるオブジェクトなどが実現できます。

Ignore Component when Moving

もしノードが検索に引っかからない場合は「状況に合わせた表示」のチェックを外してみてください。

こちらのノードも同じ様な機能ですが、先程のノードと異なりコンポーネント(コリジョン)単位で無視設定ができます。
よりきめ細かい設定をしたい場合に使用できます。

ClearMoveIgnoreActors, ClearMoveIgnoreComponents

今までに行った無視設定をすべて解除します。
「Ignore Actor when Moving」ノード、「Ignore Component when Moving」ノードの Should Ignore を false にして呼び出せば一つずつ解除できますが、まとめて解除したい場合に使えます。

おわりに

以前にも使ってみたことがあるのですが、しばらくしたらすっかりノードの存在を忘れていたので今回の記事を書いてみました。