本文翻译自:https://docs.live2d.com/cubism-sdk-tutorials/eyeblink/
译者注:注意!这并不是一篇严谨的翻译,本人并不是翻译行业从业者,也根本不会日文。官网的中文翻译会连带代码一起翻译,而且还不如机翻日文,官网的英语翻译版本有的语法很奇怪,看起来也是机翻。本文主要来自日文机翻,然后再结合实际开发经验调整到通顺,修改不该翻译的东西并润色。
[最后更新日期: 2020/01/08] 译者注:这是这个日文原文的更新日期
在这里,我们将说明如何实现模型的自动眨眼。
[导入 SDK-放置模型 ] 假设模型已经放置到项目中。
摘要
在模型中设置了标准眨眼参数 [左眼张开/关闭(ParamEyeLOpen)] 和 [右眼张开/关闭(ParamEyeROpen)] 的情况下,
在导入模型时会自动为预制件自动设置为自动眨眼相关参数。
如果希望在没有以上设置的模型上实现自动眨眼,则可以按照本文中描述的步骤进行部署。
Cubism SDK 使用一个名为 EyeBlink 的组件来实现自动眨眼。
要在 Cubism 模型上部署 EyeBlink,需要以下三步:
- 附加管理眨眼的组件
- 设置用于眨眼的参数
- 设置用于自动处理眨眼参数值的组件
附加管理眨眼的组件
附加一个名为 CubismEyeBlinkController
的组件来实现眨眼。
CubismEyeBlinkController
有两个设置项。
Blend Mode : 指定如何计算当前眼睛睁开的大小。
- Mutiply : 将当前值乘以 "Eye Opening" 值。
- Additive : 将当前值乘以 "Eye Opening" 值
- Override : 用 "Eye Opening" 值覆盖当前值。
译者注:不管你加不加这个 CubismEyeBlinkController
,要是模型里面做了眨眼这个功能,他都会眨眼。但是这样就是有了两个能控制眨眼的方式,于是就有了「Blend Mode」。其中:「当前值」就是模型自带的动画里的值,「Eye Opening」就是 CubismEyeBlinkController
的值。最后结果如何混合就是「Blend Mode」决定的了。
- Eye Opening :
睁开眼睛和闭上眼睛的幅度。1 视为睁眼,0 视为闭眼。当从外部操纵该值时,将会自动应用修改(译者注:眼皮就会自己跟着变化)。
这次,将 [Blend Mode(混合模式)] 设置为 [Override (覆盖)]。
设置用于眨眼的参数
管理模型参数的 GameObject
放置在 [模型]/Parameters/
下。
此外,他们的名称是参数的 ID。
他们都可以通过 CubismModel.Parameters()
获得。
将一个名为 CubismEyeBlinkParameter
的组件附加到表示眨眼的参数 ID 所在组件上。
译者注:就是在两个代表眼睛的 GameObject 上面附加个 CubismEyeBlinkParameter
,当然你要附在例如呆毛或者某些奇怪的地方也没人管你🤔。
如果将 CubismEyeBlinkParameter
附加到该参数的 GameObject
,则运行场景时,CubismEyeBlinkController
将引用该参数并实现眨眼。
使用以上设置,您将能够通过脚本等做到眨眼,但是仅此一项还不能自动执行眨眼。
为了使其自动眨眼,还需要设置一个定期操纵值的组件。
设置用于自动处理眨眼参数值的组件
像 CubismEyeBlinkController
一样,将名为 CubismAutoEyeBlinkInput
的组件附加到模型所依附的 GameObject 上面。
CubismAutoEyeBlinkInput
具有以下三个设置项目。
- Mean : 每次眨眼之间的间隔。单位是秒。实际上的时间是该值与最大值共同决定的。
Maximum Deviation : 设置要在眨眼间隔中添加的波动最大值。这个值应该大于或者等于 0
- 如果按照上述 "Mean" 中设置的时间眨眼,则周期是均匀的,那样看起来很不自然。
- 因此,通过添加随机波动的值到设置的时间周期中就会使运动自然。
实际计算如下:
- 下一次眨眼的时间 = Mean + (从 -Maximum Deviation 到 +Maximum Deviation 之间的随机值)
- Timescale : 设置眼睛睁开和闭合的速度。设置的值越大,速度越快。
这次,将 Mean
设置为 2.5,将 Maximum Deviation
设置为 2,并将 Timescale
设置为 10。
这样就完成了自动眨眼的配置。
如果现在运行场景,则可以让模型自动眨眼。