まず始めに今年は年末にかけて多忙な生活になるため、更新があまりできそうありません。あらかじめご了承ください。
さて、今回はUE4.8以降から挙動が変更された"DefaultSceneRoot"というシーンコンポーネントについてです。シーンコンポーネントというのは、トランスフォーム情報を含むのみのコンポーネントです。
ただのアクターを継承したクラスブループリントを作成した場合、まずはこのDefaultSceneRootを持つアクターが生成されます。
コンポーネントの置き換え
4.7まではコンポーネントを追加した際に自動的にDefaultSceneRootは追加したコンポーネントで置き換えられていましたが、4.8以降では手動で置き換える必要があります。
スタティックメッシュを追加した状態。このままでも問題ないケースもあります。
これをドラッグ&ドロップでDefaultSceneRootをそのまま置き換える事ができます。
これで4.7までと同様の状態にする事が出来ます。
そもそもなぜ置き換える必要があるのか?
なぜ置き換える必要があるのか?
それはDefaultSceneRootはコリジョンの情報を持っていないので、子供のコンポーネントに引き継がれません。この状態で、"AddActorLocalOffset"や"AddActorWorldOffset"等のアクター移動系ノードを使用して移動した場合、たとえ子供のコンポーネントがコリジョンを持っていたとしてもコリジョンが正常に機能しません。
AddActorLocalOffsetであたり判定をとる場合には、"Sweep"にチェックする必要があります。
通常であればこれでも正常にコリジョンがヒットしますが…
見事にめりこんでしまいます…
逆にコンポーネントを直接を移動させた場合。
AddLocalOffsetでStatic Meshを指定してみる。
めり込みません。
しかしこのやり方ではあくまでもコンポーネントを移動させているので、アクター本体が動いていないという事に注意する必要があります。
それを解決するためにも、DefaultSceneRootはコリジョンを持つコンポーネントで置き換えておく必要があります。デフォルトの挙動が変わって戸惑う事もあるかと思いますが、DefaultSceneRootをそのまま使う事もありますので、選択肢として両方がとれるようになったと思えば納得がいきます。
が、このような状態で何が起きているのかわからない人もいると思いますので、DefaultSceneRootの扱いには十分注意しておきましょう。