僕の私のUnrealな日々

UE4のBluePrintを使って小さなギミックを作ったりしてます。ブログを通じて情報共有ができたらなと思います。

UE4:BoxCollisionのスケールをLineTraceでHitしたLocationまで伸ばすBPについて

 

LineTraceを使用した際に、BOXを設置して当たり判定を付けたいと思い作成しました。

コリジョンのX軸をLineTraceが当たった部分まで伸びる仕様です。

 

 Playerに当たった時

 

つまりこういうことです。

f:id:Bussan_dayo:20151213140419p:plain

 

で、この画像を意気揚々と作っていた時にBoxTraceByChanel使えば良くね?という圧倒的発想力で問題は解決したのですが、

docs.unrealengine.com

今回のBPの利点としてコリジョンのスケール管理が簡単になります。(ビューポートでYZ軸のスケールのチェックが簡単に出来る。)

 

あとは・・・うん・・・

 

 

ブループリントの作成

Actorを作成しBoxCollisionを設置します。サイズの変更の際に、

f:id:Bussan_dayo:20151213140952p:plain

 

 

 

 

 シェイプを弄る必要があります。(拡大縮小を使うとおかしいことになります。)

f:id:Bussan_dayo:20151213141146p:plain

 

 次にArrowを設置します。

f:id:Bussan_dayo:20151213141228p:plain

 

X軸にArrowを設置します。

 

今回はチェックしやすいようにConstructScriptにBPを組みます。

f:id:Bussan_dayo:20151213141334p:plain

Arrowの位置と前方向のスケールを取って画像のように組みます。

 

次にBoxのスケールのX軸をLineTraceにあったところまで伸ばすようにします。

 

まずスケールを変更します。

f:id:Bussan_dayo:20151213141416p:plain

 

 LineTraceが当たったLocationを取りArrowのLocationで引き算をします。数値的にマイナスになると不便なのでLengthを取りました。ここで2を割ります。これをMakeVextorを出しX軸に入れます。

 Y、Z軸にはビューポートで変更したスケールの数値を入れたいのでScaleを取りBreakしてYZ軸に入れました。

 

これで以下の画像のようになります。位置がおかしいので変更します。

f:id:Bussan_dayo:20151213141842p:plain

 

あたったLocationと元のLocationの中間地点に設置します。

f:id:Bussan_dayo:20151213142028p:plain

 

先ほどの2で割った数値でMakeVectorのX軸に入れます。X軸しか使わないためYZ軸には0を入れました。これをArrowのRelativeLocationを出し足し合わせます。

 

これで完成です。

f:id:Bussan_dayo:20151213142256p:plain

 

これをイベントグラフに持って行きTickで繋げ、AddActorRotationを出し、BoxにOverlapした時のイベントを書くと2つ目の動画のようになります。

 

f:id:Bussan_dayo:20151213142508p:plain

 

 こっちのほうがスケール管理しやすい。うん、きっとし易い

 

 

 

しかし、これでスコープ覗いた時に敵を一気に判別出来るような処理もかけるかもしれませんね。

BoxLineTraceあんまり使ってないので使ってる人がいたら、是非こっち使ったほうが楽なんだけど~wと煽りに来てください。

 

以上