Babylonjs 克隆对象 动画映射不正确的解决方案
最近在研究Babylonjs 数字孪生展示项目,遇到一个问题,总结如下:
由于项目单工位模型较大,使用Clone方法复制模型,按理说 克隆模型会把包括动画在内的相关信息全克隆过去,但由于一些虚节点存在动画,克隆之后,虚节点动画丢失,导致整个工位模型动画变形,显示不正常,怀疑这是引擎的一个bug。
说明:使用clone方法可以使模型仅加载一次,提升性能,createInstane方法也可以仅加载一次,但createInstance仅对Mesh网格节点有效,无法批量实例化有层级的模型。
解决办法:
- 获取源模型的子节点,并获取clone模型的子节点
var sourceNodes = station.getChildren(null,false); var cloneNodes = stn1.getChildren(null,false);
- 创建源模型的AnimationGroup
var animationGroup0 = new BABYLON.AnimationGroup("animationGroup0");
- Clone源模型的AnimationGroup,并在第二个函数参数中,修改animationTarget为clone模型的节点。
animationGroup0.clone("CloneAniGroup",(target)=>{ var index = sourceNodes.indexOf(target); if(index > -1){ return cloneNodes[index]; } return target; });
- 播放场景中的动画即可。
for(var i = 0; i <scene.animationGroups.length;i++){ scene.animationGroups[i].play(true); }
大功告成!