Babylonjs 克隆对象 动画映射不正确的解决方案

最近在研究Babylonjs 数字孪生展示项目,遇到一个问题,总结如下:

由于项目单工位模型较大,使用Clone方法复制模型,按理说 克隆模型会把包括动画在内的相关信息全克隆过去,但由于一些虚节点存在动画,克隆之后,虚节点动画丢失,导致整个工位模型动画变形,显示不正常,怀疑这是引擎的一个bug。

说明:使用clone方法可以使模型仅加载一次,提升性能,createInstane方法也可以仅加载一次,但createInstance仅对Mesh网格节点有效,无法批量实例化有层级的模型。

解决办法:

  1. 获取源模型的子节点,并获取clone模型的子节点
    var sourceNodes = station.getChildren(null,false);
    var cloneNodes  = stn1.getChildren(null,false);
  2. 创建源模型的AnimationGroup
    var animationGroup0 = new BABYLON.AnimationGroup("animationGroup0");
  3. Clone源模型的AnimationGroup,并在第二个函数参数中,修改animationTarget为clone模型的节点。
    animationGroup0.clone("CloneAniGroup",(target)=>{
    
                var index = sourceNodes.indexOf(target);
    
                if(index > -1){
                    return cloneNodes[index];
                }
    
                return target;
            });
  4. 播放场景中的动画即可。
    for(var i = 0; i <scene.animationGroups.length;i++){
            scene.animationGroups[i].play(true);
        }

    大功告成!

posted @ 2022-04-21 14:41  VTech_kevin  阅读(483)  评论(0编辑  收藏  举报