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

LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

Unreal Engine4で、Unityで言うRayの機能をBluePrintで作った

f:id:nextdeveloper:20140423145101p:plain

こんにちは、UE4に悪戦苦闘中の上津原です。 Rayの作成ができたので記事にしておきます。

Rayってなんじゃ?

Rayとは指定した一定距離内にオブジェクトがあるかどうか確かめるものです。 オブジェクトががあればそのオブジェクトを取得できます。

これを応用すれば、遠くにあるものを動かしたりできるのです!ヒューカックイイ!

実際のBluePrint

実際作ったものはこちらです。

f:id:nextdeveloper:20140423145127p:plain

大きい画像はこちら

※今回のBPはFPSの状態を基本としています。

簡単な説明

基本として「Single Line Trace for Object」を利用します。これらに「どこから(Start)」「どこまで(End)」オブジェクトがあるか確認をするかを指定したり「何を認識するか」を指定したりします。

まずは「どこから」「どこまで」を作ります。First Person Cameraの位置を取得し作成します。

開始地点はカメラのWorld Locationで問題ありません。

最終地点は、Forward Vectorを取得しそれを乗算します。今回は500となっていますが、この乗算値がどれくらいの距離でRayを打つかが決まるので、任意で変えれば遠くでも近くにでも変更ができます。そしてその値をWorld Locationに足す。そうしないとカメラの位置からRayが飛ばされなくなってしまいます。

そして、Object Typesを指定しなくてはいけません。取得したい「Object Type」のArrayをセットします。今回は「WorldDynamic」を指定していますが、壁とか動かないモノを取得したい場合は「WorldStatic」にすれば検出するようです。

そして最後に、DrawDebugTypeを「ForDuration」に指定します。これは別にやらなくてもいいんですが、発射したRayが見えるようになるので開発中は出しておくと分かりやすいです。

ReturnValueには、成功、失敗のBoolが返ってきます。OutHitには、ヒット時の各種情報がまとまって返ってきます。これはそのままでは使えないのでBrakeして情報を分割しています。

これでRayは完成

これでPlayしてみると、以下のような変な赤い串のようなものが表示されるはずです。

↓これは一度出してからわかりやすいように横から見ています。

f:id:nextdeveloper:20140423145101p:plain

この赤いラインがRayです。やったね!

ここから持ち上げもついでに入れてみる

持ち上げるためのBlue Printは以下のようにしてみました。

f:id:nextdeveloper:20140423151238p:plain

大きい画像はこちら

カメラにアタッチしたりデタッチしたりするだけです。

そうすると、こんな風になります。

まだ持ち上げているハコにPhysicsはつけてないのでちょっと不自然ですがこんな感じで動かせるようになりました。ちなみに、Physicsを持っているものはAttachできないので場だもう少し付け足しが必要になります。

Blue Print難しいけど面白い

Blue Printって、理解しやすいやらそうじゃないやらわからない感じもしますけど、慣れてくるとなかなか楽しいもんですね~。

何かまた報告できるものができたら記事にします。それでは~。