妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

フォリッジで側面にも草を生やす

f:id:una_unagi:20180515232544p:plain

「本当は全然違う話を書こうとしてたというか、このマテリアルについて調べて書こうとしてたんだけど」

3dnchu.com

「なんか公開停止になってて、動画も消えちゃってるみたいで」

※5/18 追記 現在は正常に公開されてます

妹「それはまたどうしちゃったんだろう?」

「よくわかんないけど、中身のブループリントに無効なノードがあったりしたから、そこらへんが気になったけど、それだけなら動画まで消す必要はなさそうだし。とりあえず今日はそれを調べてる過程でフォリッジの仕組みが少しわかった」

f:id:una_unagi:20180515232822p:plain

「普通はフォリッジ機能でペイントできるの、上を向いたポリゴンだけみたいで、横とか下とかにはおけないんだけど、こうやってスタティックメッシュを回転させると、そのままフォリッジも回転することがわかった。メッシュを移動させた時にもついてくる」

f:id:una_unagi:20180515232941p:plain

「そうやって回転させていくと、最終的に全面的に草まみれにすることができた。草をいっぱい増やすことができる」

妹「なんで最初から横も塗れるようになってないんだろ?」

「わかんない。なんか別のとこに設定があるのかもしれないけど。真上じゃなくてもいいけど、かなり上を向いてないと駄目な感じが」

f:id:una_unagi:20180515233347p:plain

「ちょっとデコボコしたとこをが上を向いてたりすると、そこには草が生える。でも駄目なとこには何度やっても草が生えない。でも角度を変えればOKだった」

Rotatorに角度を足し算する② それでも強引に足し算する方法

f:id:una_unagi:20180510222637g:plain

imoue.hatenablog.com
imoue.hatenablog.com
昨日までの

「昨日はCombine Rotationsノードを使うことで、角度をちゃんと変化させる方法をやったけど、実はもう少しちゃんとしてない方法もある」

f:id:una_unagi:20180511233125p:plain

「こういう風にすると、普通に角度を足しても回転させることができる」

妹「これは何が違うの?」

「いったん現在の角度をRotator変数に保存して、それをSetActorRotationする。次のフレームも、GETする時は必ず変数からで、GetActorRotationは使わないようにすると、これはこれでちゃんと回転する。一昨日にやった、ロールとヨーが反転しちゃう問題は、どの時点で発生してるかっていうのが問題で」

妹「GetActorRotationした時?」

「実際にはSetActorRotationした時点かもしれないけど、どちらにしてもGetActorRotationした時点でそうなってることがわかる。そこで角度の正規化が行われて、ロールとかが反転しちゃう。でもRotator変数に保存しただけなら元の数字が残ってる。だから反転もしないし、720.0とか設定しても0に戻らない。そのままの数字。丁度エディタで角度のとこに数字を入れたのと同じような状態になってるはず」

妹「でも昨日のやつの方がラクチンのような」

「まあそうなんだけど、こういうやり方が必要なケースもあるかもしれない。角度の数字がプレイヤー側にも表示されてる場合とか。勝手に反転されたら気味悪いだろうし。あと変数はRotatorじゃなくVectorにした方が計算は楽。足し算ノードとか使えるから。SetActorRotationの時にそのVectorをつなげば自動で変換ノード出るし」

妹「Rotatorは足し算出来ないんだ……でもそうするとVectorとの違いっていったい」

「データ的にはたぶん同じ物なんだけど、これは角度のやつってしといた方が、わかりやすいんじゃないかな。うっかり違うのにつないだ場合も変換ノードで気づくし。足し算をさせないようにというのもその一環で」

妹「普通にfloatに分解して足してたから全然気付かなかった」

Rotatorに角度を足し算する

f:id:una_unagi:20180510222958p:plain

「昨日やったように、角度を変化させる時に普通に足し算で計算すると、途中で変な結果になる場合がある」

imoue.hatenablog.com
昨日のやつ

「ので、今日はそうならない用に足し算する方法。そういう角度関係のノードはヒストリアさんの記事で一覧になってて、だいたいここに載ってるから、趣旨が近そうなのを調べればいい」

[UE4] BlueprintのRotatorノードまとめ|株式会社ヒストリア

「見た感じだとたぶん、Combine Rotatorsというのが、それっぽい気がする」

妹「回転の……合成?」

「1フレームごとにピッチを0.1度ずつ変える、というのがやりたいことなんだけど、それはピッチが+0.1になったRotatorと元のRotatorを合成するという風に解釈できる」

f:id:una_unagi:20180510223005p:plain

「なので昨日のブループリントをこんな感じに書き換えると」

f:id:una_unagi:20180510222637g:plain

「こうなる」

妹「あ、ちゃんと太陽がループしてる。こんなかんじにやりたかったんだよ。なんか色が汚いけど」

「汚いのは動画容量の関係とかで、元のやつはちゃんとしてる」

妹「でもこれだとなんで大丈夫なんだろう? 結局0.1足してるような」

「ピッチの数字だけ見ると0.1だけど、ロールとヨーが0で、かつピッチが0.1の場合というRotator全体がセットになってるから。常に同じ向きで回転するんだよ。もちろんロールとヨーをそれぞれ180にすれば意図的に逆転させることもできる」