Pose (Cocos Creator)
最終更新: 2023年3月14日
概述
Pose是管理Pose设置格式.pose3.json中描述的部件群显示状态的功能。
通过使用Pose,您可以管理不想同时显示在画面上的部件,例如“放下状态的手臂”和“交叉时的手臂”。
此外,通过使用Pose,可以支持具有不同Part ID的模型(换装等)。
.pose3.json可以在Cubism Viewer for OW中设置。
有关如何设置部件等详细信息,请参考此处。
将OW方法载入的模型与常规方法的模型进行比较时,根据Pose的不同,以下三点会发生变化。
- CubismPosePart被附加到[Prefab根]/Parts/以下的GameObject。
- 如果AnimationClip中的PartOpacity曲线与Stepped匹配,则会被加工为Linear曲线。
- 从AnimationClip中删除未在pose3.json中描述的Opacity曲线。
Pose执行以下处理:
- 在Pose动态内加工通过Stepped设置的Parts的Opacity(不透明度)曲线
- 识别Pose用部件
- 保存部件的Opacity以确定要显示哪个Pose部件
- Pose的计算与应用
- 不透明度联动
在Pose动态内加工通过Stepped设置的Parts的Opacity(不透明度)曲线
如Editor手册中的姿势设置所述,Pose处理的部件不透明度(PartOpacity)曲线假定曲线类型为步(Stepped)。
在Cubism SDK for Cocos Creator中,这条曲线被加工成直线(Linear)并输出到AnimationClip。
如果您设置了除Stepped以外的曲线,则该曲线将不会被加工,并将按原样输出到AnimationClip。
if ( shouldImportAsOriginalWorkflow && poseJson != null && poseJson.adeInTime != 0.0 ) { let track = CubismMotion3Json.convertSteppedCurveToLinerCurver( curve, poseJson.fadeInTime ); }
加工该Opacity曲线的处理由CubismMotion3Json.toAnimationClipB()执行。
识别Pose用部件
当您使用OW方法载入模型时,会附加CubismPosePart。
要附加的Node将与置入[Prefab根]/Parts/下的.pose3.json中描述的ID具有相同的名称。
// 获取Pose的部件 const part = ArrayExtensionMethods.findByIdFromParts( parts, group[partIndex].id ); // 附加CubismPosePart posePart = part.node.addComponent(CubismPosePart)!; // 将Pose信息设置为CubismPosePart posePart.groupIndex = groupIndex; posePart.partIndex = partIndex; posePart.link = group[partIndex].link;
保存部件的Opacity以确定要显示哪个Pose部件
通过将CubismPart.opacity的当前值与前一帧缓存的值进行比较,确定.pose3.json中描述的组中的显示部件。
该值使用CubismPoseController.savePartOpacities()进行缓存。
Pose的计算与应用
使用AnimatinoClip应用显示部件。
使用CubismPoseController.doFade()应用隐藏部件。
隐藏部件的Opacity因为与显示部件的不透明度的关系,将不透明度降低到背景不透明的水平。
在CubismPoseController.doFade()中寻找显示部件,然后设置隐藏部件Opacity。
不透明度联动
不透明度联动在应用Pose后,在CubismPosePart.link中编写Opacity的联动部件使用CubismPoseController.copyPartOpacities设置Opacity。