UE4でVR空間にカノジョを錬金する Advent Calendar 2017 18日目の記事です。
12/1~25日までに一人で、UE4を用いてサ○○レッスンとかVR○○ジョっぽいゲームを作って仮想彼女を生み出すことにチャレンジします。
今回は呼吸しているように見えるようなアニメーションを実装していきます。
今回処理がかなり長いので、複数回に分けます。
#参考にしたサイト
[Unity] キャラクターが呼吸するスクリプトが公開されていますで掲載されていたフルートさんの記事と公開されているスクリプト、スクリプトで呼吸させる - 第2回 | Unity3Dを参考にしています。
同じような感じで、特定のボーンを回転させて、呼吸をしているように実装していきます。
#変数設定
色々と変数を設定しているので簡単に説明していきます。
変数名 | 説明 | 型 | 初期値 |
---|---|---|---|
SpineRotator | 腰の回転を示す変数 | Rotator | 0,0,0 |
ChestRotator | 胸の回転を示す変数 | Rotator | 0,0,0 |
NeckRoator | 首の回転を示す変数 | Rotator | 0,0,0 |
HeadRoator | 頭の回転を示す変数 | Rotator | 0,0,0 |
durationRate | 呼吸1サイクルに要する時間を調整 | float | 1 |
effectRate | 呼吸の深さを調整 | float | 1 |
inhale | 息を吸う時間 | float | 1.2 |
exhale | 息を吐く時間 | float | 2.4 |
rest | 呼吸モーションの待機時間 | float | 0.2 |
spineInhale | 吸うときの腰の回転値 | float | 2 |
spineExhale | 吐く時の腰の回転値 | float | -2 |
chestInhale | 吸うときの胸の回転値 | float | -3 |
chestExhale | 吐く時の胸の回転値 | float | 3 |
neckInhale | 吸うときの首の回転値 | float | 0.5 |
neckExhale | 吐く時の首の回転値 | float | -0.5 |
headInhale | 吸うときの頭の回転値 | float | 0.5 |
headExhale | 吐く時の頭の回転値 | float | -0.5 |
phase | 呼吸のフェーズを示すenum(日本語だと列挙型) | Phase | Inhaling |
StartTime | 各呼吸のフェーズを開始した時間 | float | 0 |
#アニムグラフ実装
まずアニムグラフを実装していきます。
以下のようにボーンをトランスフォームで修正するノードで腰、胸、首、頭、左肩、右肩をセットします。
各ノードの詳細にある全てのRoatationにあるRotationModeをAdd to Existingにします。
後はすべてのボーンを設定するだけです。
##ボーン設定
腰、胸、首、頭のボーンをセットします。
これは各モデルによってボーン名が違うので、以下は参考例として出します。
上記画像の通り、Rotatonにそれぞれの回転量を示す変数をセットします。
続いて右肩、左肩のボーンをセットします。
RotatorにはChestRotatorに-1をかけて、値を反転させています。
呼吸のモーションが不自然であれば上腕のボーンをセットするのもいいかもしれません。
ユニティちゃん:Character1_LeftArm,Character2_RightArm
グレイちゃん:UpperArm_L,UpperArm_R
これでアニムグラフの設定が終わりました。
複数のアニムグラフがある場合、全てこの設定をする必要があるので、コピペで貼り付けましょう。
本日は以上となります。
#次回以降
呼吸のロジックを実装していきます。