Laya3D資源加載


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{
    
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM