今回やること
入力された底辺と高さからスロープを生成する
*今回もUE4で極めるゲーム開発(https://www.borndigital.co.jp/book/6359.html#book_support) で活用できるスロープコンストラクションの作成を行うので上記書籍を使用した前提で書かせていただきます。
目標
・底辺と高さのみ与えられた状態からスロープを生成するようにする。
・上記に合わせ幅も指定できるようにする。
1. 斜辺と角度を求める
底辺と高さから斜辺と角度を求めるのには三角関数を使用しますが、私は勉強をサボってきたので特に何も教えられません。ごめんなさい。
まずは斜辺はピタゴラスの定理を利用し求める。これで斜辺を形成するのに必要な床の枚数が分かる。ここでは、 SloopBaseLength で指定された数の床を拡大して生成する。
良くは分かっていないのだが、どうやら A 入力ピンには高さ、 B 入力ピンには底辺を渡すらしい。これはちょうど tanθ を求めるときの上下関係になっている。ほへー。
とりあえず1枚表示してみよう。
拡大も問題なくできているようだ。
オプションを見るとユーザーが指定しない値が表示されているがこれはデバッグがしやすいかなと思って見えるようにしただけなので後で隠すようにする。
2. 2枚目以降の生成位置を決める
ブループリントの関数がどう使われるのか調べても日本語のページはなかなか見つからない。英語も読めるようにならねば。
AddHeight, AddWidth は移動ベクトル(?)を求めている。
sin, cos はそれぞれ受け取った値を θ に入れた sinθ, cosθ の値を返す。床1枚は縦 100 なので実際の移動距離を求めるようにしている。
先に一列作りたかったので Wide のループの中で SloopBaseLength のループを回している。あとは特にない。確認して終わりにしよう。
3. 並べる
なぬ。。。一定間隔でzファイトが起こっている。。。
お気付きだろうか。私は移動ベクトルを求めるところで実際の移動距離を求めるために床1枚分 100 をかけている。傾斜補正で1枚を拡大しているというのに。因みに私はこれで1時間悩んだ雑魚なのだ。
というわけで修正、ついでに整理
拡大後の床1枚分に変更しただけ。
大丈夫そうだ。しかし念のためワイヤーフレーム上でも確認しよう。
完璧!!!!!
おわり
数学分かってたりブループリントが分かっていると非常に楽だったと思う。移動ベクトルも拡大しなければいけないのは至極当然のことですね、反省。
1つ気になるのが1枚目の床の生成場所だ。できるなら表下左角を起点にしたいのだが角度によって変わるので求め方が大変そうなので今回はやらない。頭が働かないので。お粗末!!!!