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

Let's Enjoy Unreal Engine

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

UE4 DefaultSceneRootの挙動について

まず始めに今年は年末にかけて多忙な生活になるため、更新があまりできそうありません。あらかじめご了承ください。

 

さて、今回はUE4.8以降から挙動が変更された"DefaultSceneRoot"というシーンコンポーネントについてです。シーンコンポーネントというのは、トランスフォーム情報を含むのみのコンポーネントです。

Unreal Engine | コンポーネント

ただのアクターを継承したクラスブループリントを作成した場合、まずはこのDefaultSceneRootを持つアクターが生成されます。

f:id:alwei:20151108090402j:plain

 コンポーネントの置き換え

4.7まではコンポーネントを追加した際に自動的にDefaultSceneRootは追加したコンポーネントで置き換えられていましたが、4.8以降では手動で置き換える必要があります。

f:id:alwei:20151108091240j:plain

スタティックメッシュを追加した状態。このままでも問題ないケースもあります。

f:id:alwei:20151108091530j:plain

これをドラッグ&ドロップでDefaultSceneRootをそのまま置き換える事ができます。

f:id:alwei:20151108091641j:plain

これで4.7までと同様の状態にする事が出来ます。

そもそもなぜ置き換える必要があるのか?

なぜ置き換える必要があるのか?

それはDefaultSceneRootはコリジョンの情報を持っていないので、子供のコンポーネントに引き継がれません。この状態で、"AddActorLocalOffset"や"AddActorWorldOffset"等のアクター移動系ノードを使用して移動した場合、たとえ子供のコンポーネントコリジョンを持っていたとしてもコリジョンが正常に機能しません。

f:id:alwei:20151108092601j:plain

AddActorLocalOffsetであたり判定をとる場合には、"Sweep"にチェックする必要があります

通常であればこれでも正常にコリジョンがヒットしますが…

f:id:alwei:20151108092830j:plain

見事にめりこんでしまいます…

 

逆にコンポーネントを直接を移動させた場合。

f:id:alwei:20151108093040j:plain

AddLocalOffsetでStatic Meshを指定してみる。

f:id:alwei:20151108093201j:plain

めり込みません。

しかしこのやり方ではあくまでもコンポーネントを移動させているので、アクター本体が動いていないという事に注意する必要があります。

それを解決するためにも、DefaultSceneRootはコリジョンを持つコンポーネントで置き換えておく必要があります。デフォルトの挙動が変わって戸惑う事もあるかと思いますが、DefaultSceneRootをそのまま使う事もありますので、選択肢として両方がとれるようになったと思えば納得がいきます。

が、このような状態で何が起きているのかわからない人もいると思いますので、DefaultSceneRootの扱いには十分注意しておきましょう。