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
これでアニムグラフの設定が終わりました。
複数のアニムグラフがある場合、全てこの設定をする必要があるので、コピペで貼り付けましょう。
本日は以上となります。
次回以降
呼吸のロジックを実装していきます。






