CRIWARE Unity Plugin Manual  Last Updated: 2024-12-05
複数キャラクターでのリップシンク使用方法
本節では、複数キャラクターでのリップシンク使用方法を解説します。
覚え書き:
プラグインデフォルト設定の場合、 CriLipsAtomAnalyzer ハンドルは8つまで生成が可能です。( CriWare.CriLipsAtomPlugin.InitializeLibrary )
これは CriLipsAtomAnalyzer のワークサイズが大きく、1ハンドルごとに約140KiBのメモリを消費するためです。
また、同時に複数の音声を解析した場合に無視できないCPU負荷が発生するため、アドベンチャーゲームの会話シーンなどの一般的な利用ケースを想定し、最大数を8つとしています。
なるべく少ない数のハンドルを使い回すような実装をおすすめします。
上記の問題を認識した上でより多くのハンドルを作成する必要がある場合、後述の制限の解除方法をご参照ください。
ADX LipSync Library を使用して複数キャラクターでのリップシンクを行う方法は、主に以下の2通りがあります。
CriWare.CriLipsDeformerForAtomSource コンポーネントを使用する場合
以下の条件のとき、CriLipsDeformerForAtomSourceコンポーネントを使用することでお手軽にリップシンクを行うことができます。
  • CriAtomSource を使用している
  • リップシンクを行うキャラクターがシーン中入れ替わらず、8人まで
まずCriLipsDeformerForAtomSourceコンポーネントをそれぞれのキャラクターごとに用意します。
シーン中、上記で設定したCriAtomSourceをキャラクターごとに使い分けることで複数キャラクターのリップシンクが可能となります。
CriLipsDeformerForAtomSourceコンポーネントの設定方法については以下のページをご覧ください。
CriLipsAtomAnalyzer クラスをスクリプトから使用する場合
ゲーム中に複数キャラクターが次々に登場し、 CriAtomExPlayer を使用している場合はこちらが便利です。

冒頭の制限がございますが、以下のように解析器を使いまわすことで複数人のリップシンクを行うことができます。
まずあらかじめ CriLipsAtomAnalyzer を2つ生成しておきます。
CriAtomExPlayer player1 = new CriAtomExPlayer();
CriAtomExPlayer player2 = new CriAtomExPlayer();
CriAtomExPlayer player3 = new CriAtomExPlayer();
CriLipsAtomAnalyzer atomAnalyzerA = new CriLipsAtomAnalyzer();
CriLipsAtomAnalyzer atomAnalyzerB = new CriLipsAtomAnalyzer();
つぎにシーン中のリップシンクを行いとき、制御対象となる CriAtomExPlayer に生成済みの CriLipsAtomAnalyzer をアタッチ後、音声再生を行います。
このときアタッチされた CriLipsAtomAnalyzer から解析された口形状情報を取得できます。
/* player1に解析器をアタッチし、player1の音声を解析する */
atomAnalyzerA.AttachToAtomExPlayer(player1);
/* アタッチ後、player1で音声再生を行う */
player1.Start();
/* player2に解析器をアタッチし、player2の音声を解析する */
atomAnalyzerB.AttachToAtomExPlayer(player2);
/* アタッチ後、player2で音声再生を行う */
player2.Start();
制御対象の CriAtomExPlayer が変わるごとにデタッチ、アタッチ操作を行います。
CriAtomExPlayer.Status が CriAtomExPlayer.Status.Stop のときにデタッチが可能です。
if(player2.GetStatus() == CriAtomExPlayer.Status.Stop){
/* player2からplayer3に切り替えるため解析器を外し、再度アタッチを行う */
/* CriLipsAtomAnalyzer.DetachFromAtomExPlayer() の引数に true を渡すことで強制的に再生を停止することも可能です */
atomAnalyzerB.DetachFromAtomExPlayer();
atomAnalyzerB.AttachToAtomExPlayer(player3);
}
注意
どうしても同時に9人以上の音声を解析が必要な場合
冒頭の覚え書きにもある CriLipsAtomAnalyzer のワークサイズと複数同時音声解析の負荷を許容できる場合、スクリプトから上限を変更することができます。
ライブラリ初期化時の CriLipsAtomPlugin.InitializeLibrary(uint maxHandles) のmaxHandlesを増加させることで任意の個数の CriLipsAtomAnalyzer インスタンスを生成することができます。
ただし、メモリ消費量と CPU 負荷が増大するためターゲット端末実機で動作を確認することを推奨いたします。