Unityエディタ上でVRIKなどのモーションキャプチャをしたHumanoidキャラクターのモーションを記録, 再生をするスクリプトです。
例えばVTuberの人が1テイク目でキャラの動きだけを撮り、2テイク目以降で1テイク目のモーションを再生しながら音声と表情を付ける、という使い方を想定しています。
releasesからEasyMotionRecorder.unitypackageをダウンロードしてプロジェクトにインポートしてください
-
モーションキャプチャ対象のキャラクターをHumanoidにしておく。OculusTouchやViveコントローラ、あるいはAxisNeuronやKinectの動きがエディタ上で反映されているシーンをセットアップする。
-
シーン上に
/Assets/EasyMotionRecorder/Prefabs/EasyMotionRecorder.prefab
を配置する。 -
1.でシーン上に配置したEasyMotionRecorderにアタッチされているMotionDataPlayerコンポーネントおよびMotionDataRecoderコンポーネントのAnimatorにモーションキャプチャ対象のキャラクターをアタッチする。
-
Unityエディタ上で実行して、Rキーを押したタイミングからモーションキャプチャデータを記録、Xキーでファイル書き出しをして記録を終了します。
-
/Assets/Resources/の中にRecordMotion_2018~~~ ファイルが生成されていればモーション記録が成功しています。
-
エディタ実行前にモーション録画で生成したファイル(RecordMotion_2018~~~ )をシーン上に存在するEasyMotionRecorderゲームオブジェクトのMotionDataPlayerコンポーネントのRecordedMotionDataプロパティにアタッチします。
-
Unityエディタ上で実行して、Sキーでモーションデータの再生開始が行えます。モーションデータの最後に到達するか、Tキーでモーションデータ再生が終了します。
モーション記録して生成されたRecordMotion_2018~~~ ファイルを選択、インスペクタ上で右クリックして「Export as Humanoid animation clips」を選択するとAnimationClipに変換されます。
変換後のAnimationClipはHumanoid準拠のモーションとしてMecanimAnimatorやUnityTimeline上で扱うことが出来ます。
もし床にキャラクターが沈んでしまう場合はHumanoidのAnimationClipにあるRoot Transform Position(Y)をBased Upon:Originalに変更してください。
申し訳ありません、録画中の処理負荷は多少増えます。
インスペクタ上のEasyMotionRecorder内、MotionDataRecoderとMotionDataPlayerでキーを選べるようになっています。
素朴な実装を行っているため記録中は常にメモリを食い続けます。
もし長時間の記録が必要であればメモリの増設をお勧めします、10分程度でしたら問題ありません。
スクリプトの実行順を変更してください。
SpringBone, DynamicBone, BulletPhysicsImplなど、揺れ物アセットのScript Execution Orderを20000以上に設定してください。
MotionDataPlayer内のstartFrameで再生開始フレーム指定が可能です。
申し訳ありません、セットアップ手順の動画がありますのでご参照ください。
ビルドしたバイナリ上でモーションを記録したい場合はMotionDataPlayerCSV.csなどをご参照ください。
VRIKの処理順による問題です、再生開始時の位置を変更することで暫定対処可能です。
Unity 2017.4.28f1 64bit (Windows)のエディタ上で動作確認をしています。
Unity2017.4~Unity2019.3 での動作実績があります。
公式にはVRIKをサポートしますが、Kinectや各種モーションキャプチャーシステムでの動作も(無保証ですが)動作実績があります。
This software is released under the MIT License, see LICENSE.txt.
(このソフトウェアは、MITライセンスのもとで公開されています。)