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

 

 

posted on 2020-06-11 17:25  行运茶快乐水  阅读(1364)  评论(0编辑  收藏  举报

导航