はじめに
今回はVRchat向けの呼吸ループアニメーションの作り方を解説します。
呼吸スクリプトで動かしてキャプチャーでアニメーション化する方法を解説します。
完成したデータはこちらよりDLできます。

制作したデータより細かく呼吸の形を設定したい方、
UnityやVRChatを学びたいという方はご覧ください。
呼吸スクリプト
こちらのページにアクセス。
ダウンロードのリンクをクリック。

最新版をクリックしDL。

DLした.unitypackageをProjectにドラッグ&ドロップ。

Importを押します。

BreathControllerの中にあるスクリプトを選択。

Hierarchyに呼吸させたいモデルを読み込み。
モデルにスクリプトをドラッグ&ドロップで割り当て。

Projectを右クリック。
Create → Animator Controllerを選択。

HierarchyのモデルにAnimator Controllerを割り当て。

再生ボタンを押してPlayモード。

すると呼吸します。
これで呼吸スクリプトの設定が完了です。

必要な方はBreathControllerのパラメータを操作して動作を調整。
※私はそのまま進めます。

この呼吸はスクリプト(プログラミング)による動作です
スクリプトが入ってるとVRChatにモデルをアップロードできません。

そこでここからは動作をアニメーションに変換する方法を紹介します。
動作をキャプチャーする
こちらのページにアクセス。
使い方の中にあるリンクを選択。

最新版の.unitypackageリンクを選択しDL。

Projectに.unitypackageをドラッグ&ドロップ。

Importを押します。

Assets → EasyMotionRecorder → Prefabsにアクセス。
中に.prefabデータがある事を確認。

Hierarchyにドラッグ&ドロップ。

読み込んだprefabを選択。

Inspectorを確認。
上2つのAnimatorにHierarchyのモデルをドラッグ&ドロップで割り当て。

再生ボタンを押してPlayモード。

Gameの画面でRキーを押します。

左下にMotion_FPS=の表示が出ていれば成功です。
8秒ぐらい経ったらXキーを押します。

再生ボタンを押してPlay状態を解除。

Assets → Resourcesにアクセス。
中にある.assetデータを選択。

Inspectorを確認。
バー上側の明るい色所を右クリック。
Export as Humanoidの方をクリック。

アニメーションデータが生成されます。

アニメーションデータを任意の名前に変更。

これでキャプチャーでのアニメーション化が完了です。
アニメーションの最適化
.animファイルをダブルクリック。

Animationを確認。
/(^o^)\なキーフレームが打たれてます。

こちらを綺麗にしていきます。
不要ボーンの削減
呼吸スクリプトのページを見ると使われてるボーンが確認できます。

現在は足や手などのボーンもキーフレームが打たれてるので削除します。

Animator.****の名前を確認。
下記の名前の物を残して他の全てを削除。
・Chest
・Head
・Left Arm
・Left Shoulder
・Neck
・Right Arm
・Right Shoulder
・Spine
・UpperChest

これでボーンの削減が完了です。
不要フレームの削除
Hierarchyで呼吸スクリプトを入れたモデルを選択

Breath Controllerを確認。
3.8sec / cycleという一文を確認します。
分かりやすく描くと1周期=3.8秒です。 → ①

アニメーションのタイムラインを見ます。
単位は秒数です。
が、3.8秒の”0.8″の扱いに困ります。

そこでフレームを使います。
時間を1秒(1:00)に移動。
この時のフレームを確認。(30フレーム)
1秒=30フレームという事が分かります。 → ②

①と②の2つの情報を合わせます。
すると1周期114フレームという事が分かります。

Animation下のCurvesを押します。
Shift+中ホイール、Alt+中ホイールでカーブが見える状態にします。
ループの切れ目に良さそうな所に時間軸を移動。

Dopesheetに戻りフレームを確認。
3です。

3より前のフレームを選択。
Deleteキーで削除。

残ったキーフレームをすべて選択。
0:00にドラッグ&ドロップで移動。

1周期のフレーム(114)を入力。
115~全てのキーフレームを選択。

Deleteキーで削除。

これで不要フレームの削除が完了です。
不要フレームの削除
キーフレームが多すぎるので間引きます。
これを手動でやります。

0をスタートに4つのフレームを選択 → 削除を繰り返します。

最後の所111~114の所も気にせず削除します。
(次の記録フレームが115の為)

0フレーム目のキーフレームをコピー。
115フレーム目にペースト。

Inspectorの再生ボタンを押します。

0~115の接続の動作を見ます。
綺麗に動いたのでこれで完成です。

【フレーム被りの解消】
もし綺麗に動かない方は0と115のフレーム被りを修正してください。
フレームを114に移動。

キーフレームを追加ボタンをクリック。

115フレームを削除。

これでフレーム被りが解消されました。

これで呼吸アニメーション最適化が完了です。
データ整理
ここからは仕上げ作業です。
データの整理します。
Inspector設定
.animファイルを選択。

Loop Timeにチェック。

これでInspectorの設定が完了です。
アバターのスクリプト削除
Hierarchyでアバターのモデルを選択。

VRChat SDKを開きます。
赤い!のエラー横のAuto Fixを押します。
無くなるまで押します。

Inspectorでスクリプトが消えたことを確認。

これでアバターのスクリプト削除が完了です。
不要データ削除+アニメーションの保存
HierarchyからEasyMotionRecorderを削除。

制作した呼吸アニメーションを分かりやすい位置に移動。
(ここでは、他講座の繋がりの関係上Test_Exに移動)

呼吸アニメーションを移動してから追加した呼吸関係のファイルを削除。
BreathController、EasyMotionRecorder、Resourcesの3つです。
アニメーションを移動してからじゃないとデータが消えます。
私は一度消しました。

アニメーションを分かりやすい名前に変更。(Ad_Breath)

以上で呼吸アニメーションの作成が完了です。
まとめ
今回はUnityで呼吸アニメーションを作る方法を紹介しました。
こちらをVRChatに設定する方法はこちらで解説。

ぜひこちらもご覧ください。
コメント