cuixueying 我发现3D示例代码中帐篷代码其中一段有问题,是导致我加载lh文件不显示的原因。
var staticMesh = scene.addChild(new Laya.Sprite3D());
staticMesh.once(Laya.Event.HIERARCHY_LOADED, null, function (sprite) {
var meshSprite = sprite.getChildAt(0);//此对象不一定是MeshSprite3D类型,会导致出错
var mesh = meshSprite.meshFilter.sharedMesh;
mesh.once(Laya.Event.LOADED, null, function (mesh) {
for (var i = 0; i < meshSprite.meshRender.sharedMaterials.length; i++) {
var material = meshSprite.meshRender.sharedMaterials[i];
material.once(Laya.Event.LOADED, null, function (mat) {
mat.albedo = new Vector4(3.5,3.5,3.5,1.0);
});
}
});
});
不同结构的模型导出的lh结构是不一样的,帐篷示例代码对于那个模型是适用的,但是换了嵌套了多层的Sprite3D的模型就出错了。解决方案:
staticMesh.once(Laya.Event.HIERARCHY_LOADED, staticMesh, function (sprite) {
var meshSprite = sprite.getChildAt(0);
handleSharedMeshes(meshSprite);
});
function handleSharedMeshes( meshSP ){
if( meshSP instanceof Laya.MeshSprite3D ){
var mesh = meshSP.meshFilter.sharedMesh;
mesh.once(Laya.Event.LOADED, null, function (mesh) {
for (var i = 0; i < meshSP.meshRender.sharedMaterials.length; i++) {
var material = meshSP.meshRender.sharedMaterials[i];
material.once(Laya.Event.LOADED, null, function (mat) {
mat.albedo = new Vector4(3.5,3.5,3.5,1.0);
});
}
});
} else if ( meshSP instanceof Laya.Sprite3D ){
for( var i = 0,n = meshSP.numChildren; i < n;i++ ){
var childSP = meshSP.getChildAt(i);
handleSharedMeshes( childSP );
}
}
}