UE4 / BP例:Box領域内のランダムな表面位置を取得

スポーン可能な場所を自動で探すなどに使える。

概要

ActorにBoxコリジョンコンポーネントを追加し、GetScaledBoxExtentでBoxのサイズを取得し、RandomPoint in BoundingBoxでBox内のランダムな位置を得て、LineTraceByChannelでなにかにヒットするまで繰り返す。
f:id:hat0xAA:20190510101234j:plain:w300

ノード

ActorにBoxコリジョンコンポーネントを追加し、関数FindSpotを作って、BeginPlayイベントで呼び出している。
f:id:hat0xAA:20190510101106j:plain
f:id:hat0xAA:20190510101126j:plain
f:id:hat0xAA:20190510101111j:plain

実行結果

作ったActorをレベルに配置。
f:id:hat0xAA:20190510101340j:plain


実行するとDrawDebugTypeの効果でトレース結果が表示される。
f:id:hat0xAA:20190510101234j:plain

メモ

  • LineTraceの出力ピンは「右クリック>ピンを分割」で画像のように要素毎に出力ピンを表示できる
  • この例だとStart位置はBox内だがEnd位置がBox内とはかぎらないので要注意
  • LineTraceByChannelのDrawDebugTypeをNone以外にするとトレース状況を可視化できる。赤線がトレーステストしたラインで、ヒットした位置に四角が描画される。by durationだと5秒程度表示される。

元ネタ

公式のLiveTraining動画 26分あたり
www.youtube.com