Laya3D資源加載
資源類型
- .ls為場景文件,選擇導出Scene類別時生成。其中包含了場景需要的各種數據、光照貼圖、模型、位置等。需使用 Scene3D 類加載。
- .lh為預設文件,選擇導出Sprite3D類別時生成。其中缺少場景信息,其他的特征與.ls文件相同,但是需要使用 Sprite3D 類加載。
- .lm為模型數據文件,通常是FBX格式的轉換而成。可以使用 MeshSprite3D 類加載。
- .lmat為材質數據文件,是在unity中為模型設置的材質信息。加載.ls或.lh文件時會自動加載.lmat文件來產生材質。可以使用 BaseMaterial 類來加載。
- .lani為動畫數據文件。如果模型上有動畫,導出后將生成的動畫配置文件,其中包含了動畫幀數據。加載可以使用 AnimationClip 類來加載。
- .jpg,.png:為普通的圖片文件。
- .ktx :安卓平台下的壓縮紋理的圖片格式。
- .pvr :iOS平台下的壓縮紋理的圖片格式。
- .ltc :天空盒文件,該天空盒為Cube天空盒,文件中記錄了六張圖片,分別對應天空盒的六個面。
- .ltcb : 二進制的天空盒文件,該天空盒文件為一張圖片,其中記錄了反射場景的反射信息。
- .jpg,.png,.ktx,.pvr,.ltc,.ltcb等是貼圖文件。如果有使用到貼圖,unity導出后將會生成貼圖文件。可以使用 Texture2D 類來加載。
場景加載
使用的Scene3D.load方法。
//3d場景加載 Laya.Scene3D.load("res/threeDimen/scene/TerrainScene/XunLongShi.ls",Laya.Handler.create(this,function(scene){ //加載完成獲取到了Scene3d Laya.stage.addChild(scene); //獲取攝像機 let camera = scene.getChildByName("Main Camera"); //清除攝像機的標記 camera.clearFlag = Laya.BaseCamera.CLEARFLAG_SKY; //添加光照 let directionLight = scene.addChild(new Laya.DirectionLight()); directionLight.color = new Laya.Vector3(1, 1, 1); directionLight.transform.rotate(new Laya.Vector3( -3.14 / 3, 0, 0)); }))
效果
材質加載
BaseMaterial.load方法
//材質加載 Laya.BaseMaterial.load("res/threeDimen/skyBox/skyBox2/skyBox2.lmat", Laya.Handler.create(this, function(mat){ //獲取相機的天空渲染器 let skyRenderer:Laya.SkyRenderer = camera.skyRenderer; //創建天空盒的mesh skyRenderer.mesh = Laya.SkyBox.instance; //設置天空盒材質 skyRenderer.material = mat; }));
效果
紋理加載
Texture2D.load方法
//加載紋理 Laya.Texture2D.load("res/threeDimen/texture/earth.png", Laya.Handler.create(this, function(tex) {//使用紋理 let earth1 = scene.addChild(new Laya.MeshSprite3D(Laya.PrimitiveMesh.createSphere(5, 32, 32))); earth1.transform.translate(new Laya.Vector3(10, 10, -8)); let earthMat = new Laya.BlinnPhongMaterial(); earthMat.albedoTexture = tex; earthMat.albedoIntensity = 1; earth1.meshRenderer.material = earthMat; }));
效果
網格加載
//加載Mesh Laya.Mesh.load("res/threeDimen/skinModel/LayaMonkey/Assets/LayaMonkey/LayaMonkey-LayaMonkey.lm", Laya.Handler.create(this,function(mesh) { let layaMonkey = scene.addChild(new Laya.MeshSprite3D(mesh)); layaMonkey.transform.localScale = new Laya.Vector3(4, 4, 4); layaMonkey.transform.rotation = new Laya.Quaternion(0.7071068, 0, 0, -0.7071067); layaMonkey.transform.translate(new Laya.Vector3(0, 10, 4)); }));
效果
預設加載
Sprite3D.load方法。
//加載精靈 Laya.Sprite3D.load("res/threeDimen/skinModel/LayaMonkey/LayaMonkey.lh", Laya.Handler.create(this, function(sp){ let layaMonkey2 = scene.addChild(sp); layaMonkey2.transform.localScale = new Laya.Vector3(4, 4, 4); layaMonkey2.transform.translate(new Laya.Vector3(3, 3, 0)); }));
效果
動畫加載
AnimationClip.load方法
//加載胖子精靈 Laya.Sprite3D.load("res/threeDimen/skinModel/BoneLinkScene/PangZiNoAni.lh", Laya.Handler.create(this, function(sp) { let pangzi = scene.addChild(sp) as Laya.Sprite3D; pangzi.transform.localScale = new Laya.Vector3(4, 4, 4); pangzi.transform.translate(new Laya.Vector3(0, 5, 0)); pangzi.transform.localRotationEulerY = 180; //獲取動畫組件 let pangziAnimator = pangzi.getChildAt(0).getComponent(Laya.Animator); Laya.AnimationClip.load("res/threeDimen/skinModel/BoneLinkScene/Assets/Model3D/PangZi-Take 001.lani", Laya.Handler.create(, function(aniClip) { //創建動作狀態 let state1 = new Laya.AnimatorState(); //動作名稱 state1.name = "hello"; //動作播放起始時間 state1.clipStart = 0 / 581; //動作播放結束時間 state1.clipEnd = 581 / 581; //設置動作 state1.clip = aniClip; //設置動作循環 state1.clip.islooping = true; //為動畫組件添加一個動作狀態 pangziAnimator.getControllerLayer(0).addState(state1); //播放動作 pangziAnimator.play("hello"); })); }));
效果
批量預加載資源
2D游戲資源是用Laya.loader.load()方法預加載,而3D資源必須用Laya.loader.create()這個方法。在加載完成后,我們就可以直接使用Laya.loader.getRes()這個方法來獲取加載完成的資源
//預加載所有資源 private loadResource():void{ var resource:Array<string> = ["res/threeDimen/scene/TerrainScene/XunLongShi.ls", "res/threeDimen/skyBox/skyBox2/skyBox2.lmat", "res/threeDimen/texture/earth.png", "res/threeDimen/skinModel/LayaMonkey/Assets/LayaMonkey/LayaMonkey-LayaMonkey.lm", "res/threeDimen/skinModel/LayaMonkey/LayaMonkey.lh", "res/threeDimen/skinModel/BoneLinkScene/PangZiNoAni.lh", "res/threeDimen/skinModel/BoneLinkScene/Assets/Model3D/PangZi-Take 001.lani",]; Laya.loader.create(resource, Laya.Handler.create(this, this.onLoadComplete)); } //加載資源完成 private onLoadComplete():void{ }