TypeError: Cannot read property 'btCollisionObject' of undefined
bundle.js:68723
at PhysicsCollider.__proto._onAdded (/Users/admin/layaA4/layaA4/bin/js/bundle.js:68723:31)
at MeshSprite3D.__proto._addComponentInstance (/Users/admin/layaA4/layaA4/bin/js/bundle.js:39288:9)
at MeshSprite3D.__proto.addComponent (/Users/admin/layaA4/layaA4/bin/js/bundle.js:39363:9)
at Function.Utils3D._createNodeByJson (/Users/admin/layaA4/layaA4/bin/js/bundle.js:31020:26)
at Function.Utils3D._createNodeByJson (/Users/admin/layaA4/layaA4/bin/js/bundle.js:31003:24)
at Function.Utils3D._createNodeByJson (/Users/admin/layaA4/layaA4/bin/js/bundle.js:31003:24)
at Function.Sprite3D._parse (/Users/admin/layaA4/layaA4/bin/js/bundle.js:57045:21)
at Laya3D._onHierarchyInnerFirstLevResouLoaded (/Users/admin/layaA4/layaA4/bin/js/bundle.js:8825:123)
at Handler.__proto.runWith (/Users/admin/layaA4/layaA4/bin/js/bundle.js:2162:42)
at onComplete (/Users/admin/layaA4/layaA4/bin/js/bundle.js:43827:16)
8 个回复
183*****755
赞同来自: sfsmmc
1.可行走区域建模,比如有一个场景,美术可以通过3dmax建模软件,对可行走区域建模,类似于一个平面,有高低起伏,如果美术建模,切记3dmax中和unity中的坐标转换,导入fbx到unity场景中的旋转信息必须为(0,0,0)。或者可以把场景直接放到unity中,unity中有个NavMesh的组件,通过简单脚本也可以直接生成obj,这里不熟悉unity的自行百度,然后放3dmax中转成fbx再导入unity场景中。
2. 生成高度图,先通过unity插件导出场景,这里其实也可以直接放到laya3d场景中,根据可行走区域获取高度数据,这个可参考官网的示例http://layaair.ldc.layabox.com ... ample,这个方法不推荐,因为初始化所有高度数据时间过长,如果真实游戏,体验很差。这里,由于某些需求,我写过一个脚本,但没有发布,原理 是通过射线检测可行走区域网格模型,采集高度数据,绘制生成一张png高度图,每个像素点代表一定区域高度,生成高度图的大小可控,但不要超过2048*2048,高度图越大,越精确,但相应所占的内存和显存较大,酌情选择。脚本见附件, 放到layaair3D中 直接运行即可,运行成功后,会自动下载一个文件,把文件后缀改为png即可。
3.使用高度图
高度图的预加载:
{url: "res/heightMap.png", clas:Texture2D, priority:1, params:[true]}
场景中初始化MeshTerrainSprite3D:
//通过场景中子父级节点寻找可行走区域网格模型
var meshSprite3D:MeshSprite3D = sceneSprite3d.getChildAt(0).getChildAt(0).getChildAt(13) as MeshSprite3D;
var texture:Texture2D = Loader.getRes("res/heightMap.png") as Texture2D;
//通过高度图纹理和最大高度最小高度生成MeshTerrainSprite3D
var terrainSprite:MeshTerrainSprite3D = MeshTerrainSprite3D.createFromMeshAndHeightMap(meshSprite3D.meshFilter.sharedMesh as Mesh, texture, minHeight, maxHeight);
terrainSprite.transform.worldMatrix = meshSprite3D.transform.worldMatrix;
角色行走时获取高度:
var mheight:Number = terrainSprite.getHeight(x, z);
//mheight即为当前角色所在位置高度
if (isNaN(mheight))
//非数字,则走到不走区域,做相应的逻辑判断即可
方案二:(使用方便,性能较差,不推荐)
layaAir3D在下下个 版本会新增功能--地形,也可支持从unity中导出地形,然后直接就可从地形中获取当前位置 所在高度。因为地形牵扯到移动端浏览器硬件设备的很多技术瓶颈,性能比肯定不如建模软件直接创建的模型,所以此方案酌情考虑!
sfsmmc
赞同来自:
3DMAX 原图:
拉伸变形(2048*2048):
缺失(518*266):
源码中:
183*****755
赞同来自:
qq1981150053
赞同来自:
qq1981150053
赞同来自:
smallsow
赞同来自:
MAR
赞同来自:
131*****019
赞同来自:
TypeError: Cannot read property 'btCollisionObject' of undefined
bundle.js:68723
at PhysicsCollider.__proto._onAdded (/Users/admin/layaA4/layaA4/bin/js/bundle.js:68723:31)
at MeshSprite3D.__proto._addComponentInstance (/Users/admin/layaA4/layaA4/bin/js/bundle.js:39288:9)
at MeshSprite3D.__proto.addComponent (/Users/admin/layaA4/layaA4/bin/js/bundle.js:39363:9)
at Function.Utils3D._createNodeByJson (/Users/admin/layaA4/layaA4/bin/js/bundle.js:31020:26)
at Function.Utils3D._createNodeByJson (/Users/admin/layaA4/layaA4/bin/js/bundle.js:31003:24)
at Function.Utils3D._createNodeByJson (/Users/admin/layaA4/layaA4/bin/js/bundle.js:31003:24)
at Function.Sprite3D._parse (/Users/admin/layaA4/layaA4/bin/js/bundle.js:57045:21)
at Laya3D._onHierarchyInnerFirstLevResouLoaded (/Users/admin/layaA4/layaA4/bin/js/bundle.js:8825:123)
at Handler.__proto.runWith (/Users/admin/layaA4/layaA4/bin/js/bundle.js:2162:42)
at onComplete (/Users/admin/layaA4/layaA4/bin/js/bundle.js:43827:16)