UE4で太陽光の影判定をやってみた【簡易版】と【ちゃんと版】

UE4ぷちコンにて、炎天下を避けつつ影の中を移動するゲームを作って応募した。


結果、実況で紹介され(ありがとうございます)、どうやったのかという質疑があった。
最初にどうやるか、を考えて、いろいろ試したが、時間切れで【簡易版】で応募した。
その後、誤差がほぼない【ちゃんと版】を教えてもらったので備忘録。

【簡易版】
LineTraceByChannelを使って当たり判定。
Endはグレイマンの腰(ちょうど座標があるところ)とする。
STARTは太陽の場所らへんの座標を置いてみた。

島の上空あたりに太陽を定義し、その座標をSTARTにした。

このやり方、ざっくりは合うが、マップの場所によってはかなり誤差が出る。

今回のMAPはそこまででかくなかったのでギリ大丈夫だったが、微妙な当たり判定になる場所も若干あり・・・あんまりよくない。

UE4では太陽はほぼ無限の先に定義されており。基本的にMAPのどこにいようとも平行に光が落ちてくる
MAPのどこに移動しても太陽の高さは一定となる。
だから、太陽の位置を固定してしまうと、グレイマンが動くたびに誤差が出てしまう。



【ちゃんと版】

応募後、ツイッターで教えてもらった。ありがとうございます。
太陽光線がどこでも平行Directionlight(太陽光)のX方向ベクトルであわせればよい、という点に気が付かなかった。

実際にレベルBlueprintに実装してみた。StartはグレイマンからでOK。
Endがやや複雑で
①Light Sorceから太陽光が降る方向(X軸・フォワードベクター)を出し、
②当たり判定に建物などがひっかかるようにベクトルの長さを十分に伸ばし、
③ベクトルの方向を-1で逆にして、
④グレイマンからベクトルを出す(足し算)

のようにした。

③あたりまでは、いじってるうちになんとなくわかったが、どうしても④のベクトルの足し算がわからなかった。
この動画をたまたま見つけて、わかった。
当たり判定「LineTraceByChannel」を詳細に解説しててわかりやすい。

結果、MAPのどこに移動してもばっちり合うようになった。最高。
細かいオブジェクトも利用しやすくなったので、難易度が低下した

影とり、カゲふみ、日陰等のゲームを作るときに困ったら、の備忘録として。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です