LoginSignup
16
8

More than 5 years have passed since last update.

UE4で手軽にキャラの『アレ』を揺らしてみる(Spring Controller)

Last updated at Posted at 2018-06-19

僕はゲームエンジンでキャラの『アレ』を揺らすのが大好きです。

もうすでにさび付いた頭をフル活用してネットに転がっている情報を拾い、Unity、UE4でキャラの『アレ』が、やわらかくたゆんたゆんと揺れると感動すら覚えます。

そんな一部では永遠のテーマである揺れモノの実現方法として、UE4も様々な方法があります。
その方法の一つで、ある程度の揺れクオリティを実現できるSpring Controllerが、なぜか誰か書いた形跡がなかったので、折角だから書いてみることにしました。

検証はUE4.19で行っております。

UE4で『アレ』を揺らす方法

UE4で揺れモノを揺らす方法として、オープンにしている情報では、先駆者(と勝手に呼ばせてもらっている)である、おかずさんがたくさん書いています。

UE4の物理アセット ツール (PhAT)を使って、ユニティちゃんを揺らしてみた
UE4のアニメーションの加算レイヤートラックを使って、ユニティちゃんをまた揺らしてみた
UE4のAnim Dynamicsを使って、グレイちゃんを揺らしてみた

ただ、上記の物理や加算レイヤーを使う方法だと、設定や調整が結構手間です。
特に物理は結構荒ぶりやすいので、満足が行くように設定するのは(楽しいのですが)結構大変です。

もっと手軽に『アレ』が揺れる方法ないかなー、と思って色々と調べていたらSpring Controllerノードが見つかった、という感じです。

手軽な設定で『アレ』を揺らしてみよう

『アレ』を揺らすためにAnimation Blueprintのアニムグラフで、Spring Controllerノードを使います。

image.png

今回はユニティちゃんで『アレ』を揺らしてみました。

unitychan2.gif

こんな感じです。いい感じにゆれてますねー。
公式ドキュメントはこちら:Spring Controller

プロパティ

以下、SpringControllerのプロパティです。

プロパティ 説明
Spring Bone スプリングを適用するボーン
Limit Displacement 有効時はMax Displacementの値までボーンが移動。
無効時はエンジン内部で制限なくボーンが伸びる
Max Displacement ボーンが伸縮する最長距離。値が大きくなればなるほどボーンが伸縮される
Spring Stiffness 剛性。この値が大きくなればなるほど、ボーンの伸縮するのに必要なベロシティ(速度)が変わる
ベロシティの計算はエンジン内部で行われる
Spring Damping 減衰。元のボーン位置に戻るためにフレームごとに引かれる数字。
この数値が大きくなればなるほど、揺れたらもとの位置に戻る時間が早くなる、もしくは揺れなくなる
減衰の計算はエンジン内部で行われる
Error Reset Thresh 閾値。エンジン内部でこの値以上に伸縮された場合、強制的にリセットされる
Translate X X座標に伸縮可能か
Translate Y Y座標に伸縮可能か
Translate Z Z座標に伸縮可能か
Rotate X 伸縮時にRollが回転可能か
Rotate Y 伸縮時にPitchが回転可能か
Rotate Z 伸縮時にYawが回転可能か

色々と上記のプロパティを検証しているうちに、『アレ』を揺らすための大体の値がわかってきました。

プロパティ 設定値
Spring Bone 『アレ』のボーン
Limit Displacement 有効
Max Displacement 0~5
6以上は不自然な伸び方になることが多かった
Spring Stiffness 0だと剛性がないので、とってもやわらかく『アレ』がゆれる
個人的は100以下
Spring Damping 0.1~4、大きく設定しても最大値は10~30ほど
少なくとも0は元に戻らなくなるのでNG
Error Reset Thresh デフォルト値の256
Translate X 有効
Translate Y ケースバイケース
『アレ』が縮むような動作をしたら切ること推奨
Translate Z 有効
Rotate X ケースバイケース
『アレ』が自然な回転をするならチェックを入れてもOK
Rotate Y ケースバイケース
『アレ』が自然な回転をするならチェックを入れてもOK
Rotate Z ケースバイケース
『アレ』が自然な回転をするならチェックを入れてもOK

自分が実装した限り、以下の通り、左右のボーンを一つだけSpring Controllerで設定すると自然な揺れ方をする場合が多かったです。

image.png

モデル、アニメーションよって最適なノード数、プロパティ設定値が違うので、参考程度にとどめてください。

実践してみた

『アレ』のボーンをSpring Controllerでゆらしてみました。

Before After
unitychan1.gif unitychan.gif

ゆれてますねー! デフォルトで用意されているノードを使っただけで、ここまでゆれるとは感動的です。

上記Gif画像の設定値は以下の通りです。ボーン以外の参考にしてください。
image.png

Spring Controllerで『アレ』を揺らすときの欠点

Spring Controllerでかなり手軽に『アレ』を揺らせるので便利なのですが、揺れる速度の調整等、かゆいところに手が届かないのが欠点です。

また、キャラをコントローラーで動かす場合、変な揺れ方をする場合があります。
特にジャンプ(落下)した時に不自然な揺れ方をする場合が結構あります。

『もっと細かく揺らし方をしたい!!』『僕の理想の揺れとは違う!!』という場合は加算レイヤーや物理の設定、もしくはボーンを動かす計算を自前でするということになりそうです。

物理でやる場合は荒ぶりやすいので、おかずさんの記事を参考に頑張って調整してみてください。

「UE4.18で生まれ変わった物理アセットエディタ(Physics Asset Editor)について」 と 「物理と少し仲良くなる方法について」 その1
「UE4.18で生まれ変わった物理アセットエディタ(Physics Asset Editor)について」 と 「物理と少し仲良くなる方法について」 その2
「UE4.18で生まれ変わった物理アセットエディタ(Physics Asset Editor)について」 と 「物理と少し仲良くなる方法について」 その3

Spring Controllerの揺れ調整は限界(どうしても細かい調整をSpringControllerだけでやりたい場合はエンジン改造するしかない)があるので、手軽に安易的に『アレ』を揺らすための方法、と思ってください。

それでは、よき揺れモノ実装ライフを!!


8/8追記

物理でアレを揺らしたいという方へ
NumericGazerさんのPixiv Fanboxで支援すると、揺れモノの素晴らしい動画を見ることができます。

最低100円で見れます。ワンコインで物理設定が見れるのは素晴らしいので、是非気になる方は支援してみてください。


© Unity Technologies Japan/UCL

16
8
1

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
16
8