LoginSignup
1
0

More than 5 years have passed since last update.

スロープ生成のコンストラクションを考えてみる

Last updated at Posted at 2018-10-15

今回やること

入力された底辺と高さからスロープを生成する
*今回もUE4で極めるゲーム開発(https://www.borndigital.co.jp/book/6359.html#book_support) で活用できるスロープコンストラクションの作成を行うので上記書籍を使用した前提で書かせていただきます。

目標

・底辺と高さのみ与えられた状態からスロープを生成するようにする。
・上記に合わせ幅も指定できるようにする。

1. 斜辺と角度を求める

底辺と高さから斜辺と角度を求めるのには三角関数を使用しますが、私は勉強をサボってきたので特に何も教えられません。ごめんなさい。

斜辺を求める.png
まずは斜辺はピタゴラスの定理を利用し求める。これで斜辺を形成するのに必要な床の枚数が分かる。ここでは、 SloopBaseLength で指定された数の床を拡大して生成する。
傾斜を求める.png
良くは分かっていないのだが、どうやら A 入力ピンには高さ、 B 入力ピンには底辺を渡すらしい。これはちょうど tanθ を求めるときの上下関係になっている。ほへー。
とりあえず1枚表示してみよう。
大きさを変えられた.png
拡大も問題なくできているようだ。
オプションを見るとユーザーが指定しない値が表示されているがこれはデバッグがしやすいかなと思って見えるようにしただけなので後で隠すようにする。

2. 2枚目以降の生成位置を決める

ブループリントの関数がどう使われるのか調べても日本語のページはなかなか見つからない。英語も読めるようにならねば。
生成位置.png
AddHeight, AddWidth は移動ベクトル(?)を求めている。
sin, cos はそれぞれ受け取った値を θ に入れた sinθ, cosθ の値を返す。床1枚は縦 100 なので実際の移動距離を求めるようにしている。

完成かな.png
先に一列作りたかったので Wide のループの中で SloopBaseLength のループを回している。あとは特にない。確認して終わりにしよう。

3. 並べる

届いてない.png
なぬ。。。一定間隔でzファイトが起こっている。。。
お気付きだろうか。私は移動ベクトルを求めるところで実際の移動距離を求めるために床1枚分 100 をかけている。傾斜補正で1枚を拡大しているというのに。因みに私はこれで1時間悩んだ雑魚なのだ。

というわけで修正、ついでに整理
修正して整理.png
拡大後の床1枚分に変更しただけ。
でけた下.png
でけた上.png
大丈夫そうだ。しかし念のためワイヤーフレーム上でも確認しよう。
ピッタリ.png
完璧!!!!!

おわり

数学分かってたりブループリントが分かっていると非常に楽だったと思う。移動ベクトルも拡大しなければいけないのは至極当然のことですね、反省。
1つ気になるのが1枚目の床の生成場所だ。できるなら表下左角を起点にしたいのだが角度によって変わるので求め方が大変そうなので今回はやらない。頭が働かないので。お粗末!!!!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0