配信でスライムちゃんに喋らせたいなと思い、Live2DのデータをUnityで動かすための方法を調べました。なぜスライムちゃんのデータがあるかって?・・・・それではやっていきましょう。
どんなものが出来上がるのか
今回はLive2Dのモデルをインポートし、呼吸・まばたき・AudioSourceに合わせて口を動かす処理を実装します。
完成状態
Live2DのモデルをUnityで動かすことが出来るようになります。
- 呼吸・息づかい
- 目パチ・まばたき
- AudioSourceに合わせて口を動かす
プロジェクトの準備・パッケージ入手
- Live2Dを動かすためのパッケージ
- モデルがない方はサンプルモデルの入手
導入作業
モデルを表示する
モデルを表示する上で注意する点があります。それは一回動かすということです。
- サンプルモデルをプロジェクトに追加
- アセットなどがある場所にプレファブが作成されます。
- プレファブをシーンビュー・ヒエラルキーに追加する
- この時点では何も表示されない場合があります
- 一度Playモードで再生する。
一度Playモードに入れないと表示されません。この儀式は最初の1回だけで以降は気にする必要がありません。私はこれがよく分からずに表示されない原因を色々と調べてました。やれやれ・・・
呼吸させる
呼吸をさせないと、モデルが生きた感じがしません。モデルを追加したらまっさきにやっておきたい!これだけでそれっぽいでしょ。
- モデルのルートにCubismHarmonicMotionControllerコンポーネントをアタッチ
- 追加したモデルのルートゲームオブジェクト(Cubism系がいっぱいくっついてるやつ)に「CubismHarmonicMotionController」コンポーネントを追加します。
- インスペクタのパラメータ変更
- Blend Mode:Override
- ParamBreathゲームオブジェクトを探して、CubismHarmonicMotionParameterコンポーネントをくっつける
- モデルの子供のオブジェクトの中に、「ParamBreath」という名前のゲームオブジェクトがあります。そのオブジェクトを選択してください。(スライムちゃんの場合はSlime_2>Parameters>ParamBreath)
- ParamBreathゲームオブジェクトを選択し、「CubismHarmonicMotionParameter」コンポーネントを追加してください。
- 上記手順の設定であれば、インスペクタでのパラメータ変更は不要です。
まばたき
まばたきも必須級の設定!全然ナチュラル感が変わるからね!
モデルによっては簡単にできるかも知れませんが、そうじゃない場合は下の囲みをしっかりと理解してから操作してください。
まばたきをさせるには少しだけモデルの構成を知っておく必要があります。
- まばたきはCubismParametersInspectorの「左目 開放」「右目 開放」を操作することで行います
- これらのパラメータはモデルの下にある、以下のゲームオブジェクトと連携しています
- Parameters>ParamEyeLOpen
- Parameters>ParamEyeROpen
- 対応したゲームオブジェクトがわからない場合、それっぽいParam系のゲームオブジェクトを選択して、CubismDisplayInfoParameterNameコンポーネントのDisplayNameに何か文字をいれてから、CubismParametersInspectorを表示してみてください。表記が変わっています。まばたきに関係しているゲームオブジェクトをそこから探してください。
- 上記オブジェクトを目の開閉で利用する場合、「CubismEyeBlinkParameter」というコンポーネントがアタッチされている必要がある
はい、この時点でモデルによってはCubismEyeBlinkParameterコンポーネントがアタッチされていない人がいるかも知れません。目の開閉で使われるオブジェクトが一つのモデルもあるかも知れません。いずれの場合でも、目のまばたきを行うためのパラメータと対応しているオブジェクトにCubismEyeBlinkParameterコンポーネントをアタッチしておいてください。
- モデルのルートオブジェクトに以下のコンポーネントを追加。ただしすでに追加されている場合はスキップします。
- CubismEyeBlinkController
- Blend Mode:Myltiply
- CubismAutoEyeBlinkInput
- Mean:まばたきを行って次のまばたきを行うまでのインターバル(秒)
- Maximum Deviation:Meanで設定した時間からの偏差。0にすると毎回Meanごとにまばたきを行うが、ここで指定した数値でランダムな瞬きを行う。
- Timescale:まばたきの速さ
- CubismEyeBlinkController
1ループしかしてないので同じパターンになってますが、実際にはまばらにまばたきしてます。
追加機能
ここからはとりあえず覚えておきたい機能。実際の表現で使うにはもう一捻り必要になりますがとりあえず覚えておこう。
AudioSourceの音に合わせて口を動かす
ここではAudioSourceで音がなっている間、口を動かすための処理を実装します。事前に録音した音に合わせてアニメーションするので、リアルタイムには弱いですが応用は効きます。設定の変更点としてはまばたきと同じような構成になります。
- 口を開閉するオブジェクトに「CubismMouthParameter」コンポーネントをアタッチ
- モデルのルートオブジェクトに以下のコンポーネントをアタッチ
- CubismMouthController
- Blend Mode:Override
- CubismAudioMouthInput
- Audio Input:後で追加するAudioSourceコンポーネント
- Gain:10
- Smoothing:1
- CubismMouthController
- 音を鳴らすAudioSourceを追加
- 別のオブジェクトにする必要は無いですが、今回は分けて作成
- 空のゲームオブジェクトにAudioSourceをアタッチ
- 起動時に何か音を鳴らしたい場合はAudioClipに音源ファイルを追加してください
- 作成したゲームオブジェクトをCubismAudioMouthInputのAudio Inputにセット
設定出来たら対象のAudioSourceで音を鳴らすと口が動いてくれます。開閉具合が気にいらない場合はGainなどのパラメータを調整しましょう。
コメント