CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
如何在具有多个角色时使用LipSync
本节将介绍如何在具有多个角色时使用唇音同步。
注解说明:
使用插件的预设设置时,最多可以生成8个 CriLipsAtomAnalyzer 句柄。( CriWare.CriLipsAtomPlugin.InitializeLibrary )
这是由于CriLipsAtomAnalyzer的工作区大小很大,每个句柄的内存消耗大约为140KiB。
此外,当同时解析多个音频时,CPU负载会发生不可忽略的变化,因此CRI假设通用用例(例如冒险游戏的对话场景)并将其最大数量设置为8。
建议您尽可能重用并使用少量的句柄。
如果还是需要创建更多的句柄,请参照以下如何解除限制的说明。
使用ADX LipSync库对多个角色进行唇音同步时主要可以使用以下两种方法。
使用 CriWare.CriLipsDeformerForAtomSource 组件时
在以下情况下,您可以使用CriLipsDeformerForAtomSource组件轻松执行唇音同步。
  • 正在使用CriAtomSource
  • 场景中最多有8个角色同时执行唇音同步
首先,为每个角色各准备一个CriLipsDeformerForAtomSource组件。
在场景中,可以将上面设置的CriAtomSource因应角色而分开使用,以启用多个角色的唇音同步。
关于如何设置CriLipsDeformerForAtomSource组件,请参照以下页面。
从脚本中使用CriLipsAtomAnalyzer类时
方便用于在游戏中使用CriAtomExPlayer,一个接一个登场的多个角色。

尽管有上述的限制,但可以通过轮流使用解析器对多个角色进行唇音同步,如下所示。
首先,预先创建两个CriLipsAtomAnalyzer。
CriAtomExPlayer player1 = new CriAtomExPlayer();
CriAtomExPlayer player2 = new CriAtomExPlayer();
CriAtomExPlayer player3 = new CriAtomExPlayer();
CriLipsAtomAnalyzer atomAnalyzerA = new CriLipsAtomAnalyzer();
CriLipsAtomAnalyzer atomAnalyzerB = new CriLipsAtomAnalyzer();
接下来,当在场景中执行唇音同步时,将已创建的CriLipsAtomAnalyzer添加到控制对象的CriAtomExPlayer后播放音频。
此时,可以从添加的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);
}
注意
一定要同时解析九人以上的声音时
如果可以接受之前注释中提到的CriLipsAtomAnalyzer的工作区大小以及同时解析多个音頻负载问题,则可以从脚本中更改上限。
通过在库初始化时增加CriLipsAtomPlugin.InitializeLibrary(uint maxHandles) 的maxHandles,可以创建任意数量的CriLipsAtomAnalyzer实例。
由于内存消耗和CPU负载将增大,建议您在目标终端设备上确认操作。