妹でもわかるUnrealEngine4

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

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

妹、下に落とす

妹「今まで物が落っこちる処理はProjectile MovementのGravityで設定してたんだけど、それだと上に乗った時のジャンプが変だったりしたから、落ちるようなブループリントを自分で書いてみたよ」

f:id:una_unagi:20150824180149g:plain

「なるほど。それで何か問題でも?」

妹「問題というほどのことはないけど、他のキャラクターとかと落ち方が違うから変かなあと」

「リアルな動きをうりにしたゲームじゃないし、そこはそんなに気にしないもんだと思うけど。これの中身はどうなってるの?」

f:id:una_unagi:20150824180519p:plain

妹「こういう感じになってる。同じスピードで落ちたら変だというからタイムラインで加速を表現して、物にぶつかったらいったん加速度をリセットしてる」

「なるほど。上からハンマーから叩かれたり、下から風で吹きあげたり、重力以外に作用する力を計算するのが面倒かも。でも落ち具合を思った通りに調整するならこのやり方でいいと思う」

妹「でも他と落ち方違うよね」

「重力のパラメータとアクターのVelocityを計算すれば、標準の重力と同じように計算することは出来る。でも落ち方が今のままでいいんであれば、逆に他のも全部この方法で落としたらいいんじゃないの?」

妹「そんなことしていいのかな?」

「キャラクターの重力設定切ればいいだけだし、それで上手く行かないところは直せばいいし。ただ全部にこのブループリントをコピーすると修正が難しくなるから、Tickから呼び出す関数として作るか、自作コンポーネントとして作るか。出来ればコンポーネントの方がいい。関数だと変数がアクター側に作らないと駄目そうだし、設定するのがめんどくさい」

妹「コンポーネントって作れるの?」

「作れるよ。MoveComponentを継承して作ろうとするとC++で書かないと駄目っぽいけど、ActorComponentを継承したブループリントクラスを作ればいい。MoveComponentじゃなくても移動は出来る。Move用の便利な関数とかは無いけど、それは今も使ってないわけだし」

妹「じゃあコンポーネントで作ればいいのか」

「でもコンポーネントの中にはタイムラインノードが書けないみたいなんだよね」

妹「タイムライン使えないのは困るな。じゃあコンポーネントじゃなく関数で作れば」

「関数でもタイムライン使えないです」

妹「ガーン。なんでそんな不便なんだ」

「性質的にDelayと同じだからだろうね。タイムラインを使う方法で、かつ各アクターで同じ仕組みを使うとすると、継承ぐらいしか方法がないかな。重力制御型アクターみたいなのをまず作って、それをアイテムとか敵とかで継承する感じで」