妹でもわかるUnrealEngine4

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

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

Lerp をさらにもっといい感じにする Ease

妹「数字をいい感じにしたいんだよ。上手く説明できないんだけど、とにかくいい感じに数字を変化させたいというか」

「それはEase的な話かなあ……」

[UE4] 動きに緩急をつけるEaseノードの紹介 | historia Inc - 株式会社ヒストリア

「AとBをAlphaのピンをつなぐと、Alpha が 0.0 の時に、A の値が、1.0 の時には B の値が出力される、その構造は Lerp と同じ。ただその変化の仕方が違う。そして状況によって使い分けられるように、色んな方法が選べる」

妹「Liner ってやつだと、Lerp と同じになる……?」

「そうなる。0.5だと半分、0.25だとその半分と、わかりやすく変化するのが Lerp や、Liner を指定した時の Ease。他のも規則的に変化するんだけど、暗算での予測が難しい変化をする」

妹「他のはわかるけど、Liner は要らなくない? Lerp あるから」

「状況によって方法を変える場合用だと思う。方法のところは Enum型のピンを接続して、ブループリントで制御することも出来るから。Liner しか使わない場合は Lerp でいい」

妹「それにしても色々ある。ありすぎて、どれだといい感じになるんだか、さっぱりわからん……」

「一応後半に数字が極端に伸びるやつとか色々あるけど、基本的には使ってみないと。とりあえず上限と下限が決まれば、切り替えやパラメータ調整はすぐに出来るわけだから」

f:id:una_unagi:20160910233914p:plain

「例えばこれはRPGによくある、レベル上げの時の経験値計算を想定した架空のノード。レベル100とかまであるのに、必要経験値を全部手作業で入れるというのは、普通やらない。何かしらの計算式を使ってる」

妹「レベルの上限がないやつとかもあるもんね」

「そして Liner に変化というのもあんまりしない。急に経験値がたくさん必要になってくる」

妹「全然レベル上がらん。腹立つ」

「レベル低い敵の経験値が少なくなるけど必要量は同じタイプとか、レベルが上がる時の能力上昇量で調整するタイプもあるけど、今回はドラクエ式をイメージ。それで EaseIn 方式を使ってる理由は、最初の伸びがゆっくりで、後半グッと伸びる特徴が、よくある経験値のパターンだから」

妹「Exp ってやつで曲がり具合違うみたいだけど」

「Exp っていうのは、数学でいうと指数関数のことなんだけど、とりあえず 1.0 より少ないと、最初は勢いよく伸びるけど、最後の方はそんなでも……って感じになる。数字を増やすほど後半極端に伸びる。 2.0 ぐらいのがわりと経験値っぽいと思う」

妹「そういうのだったら、SinIn とか Circular とかでもいいんじゃない?」

「そのへんも使えるよ。ただ SinIn は最後の方は伸び方が Liner に近い感じで、高レベル帯の絶望的な経験値量を演出するには向いてないかも。Circular はレベルの上限が決まってて、Alpha が 1 以上にならない場合に限って使える」

妹「レベル上限が決まってないと駄目なの? なんで?」

「Ease 自体は Lerp と同じで、Alpha が 1.0 以上の時でも対応してるから、上限をなくしても問題はないんだけど、Circular の計算式っていうのは円を描く軌道なわけで、1.0 を超えると、そのままの円で数字が戻ってきちゃうんだよ。A の方に。Alpha を 2.0 にすると完全に A になる。0.0 にした時と同じ」

妹「もっと増やすと?」

「3.0 まではまた増える。そんなわけで上限無しの仕組みを扱うには不向きな方法。まあレベル 100 以上の時は、100 の数値で固定とかで対処は出来るだろうけど」

妹「いい感じのを探すのはタイヘンそうだなあ……」