参考:

资源概述

一 常用资源类型

场景 .ls

预设 .lh

模型网格 .lm

材质 .lmat

动画文件 .lani

贴图  .jpg .png .ltc等

二  场景加载

下面加载XunLongShi(驯龙师?)场景,并创建摄像机和光照到场景中。

ResourceDemo.ts:

export default class ResourceDemo extends Laya.Script{constructor() {super();//3d场景加载Laya.Scene3D.load("res/threeDimen/scene/XunLongShi/XunLongShi.ls",Laya.Handler.create(this,function(scene){Laya.stage.addChild(scene);//添加相机var camera = new Laya.Camera();scene.addChild(camera);//设置相机清楚标记,使用天空camera.clearFlag = Laya.BaseCamera.CLEARFLAG_SKY;//调整相机的位置camera.transform.translate(new Laya.Vector3(3, 20, 47));//添加光照var 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));}));}
}

加载后显示效果

加载场景时,虽然只加载.ls文件。但是.ls文件内所有的相关资源都加载了下来。例如下图中的Skybox.lmat等。

场景.ls、材质.lmat等加载方式也是一样,凡是文件内的资源都会被自动加载。

XunLongShi.ls:

三 材质加载

下面加载天空盒材质,并赋值给天空渲染器。

                                              | -  天空网格

天空的组成  =  天空渲染器模型 -|

| - 天空材质 - 天空纹理

ResourceDemo.ts:

//材质加载
Laya.BaseMaterial.load("res/threeDimen/skyBox/skyBox2/skyBox2.lmat", Laya.Handler.create(null, function(mat){//获取相机的天空渲染器var skyRenderer:Laya.SkyRenderer = camera.skyRenderer;//创建天空盒的meshskyRenderer.mesh = Laya.SkyBox.instance;//设置天空盒材质skyRenderer.material = mat;
}));

加载skyBox2.lmat文件时,它所包含的文件以及子文件都会被加载。

skyBox2.lmat:

天空显示效果

四 纹理加载

加载地球纹理,并赋值给一个球体模型。

|- 网格PrimitiveMesh

地球的组成 = 地球模型MeshSprite3D -|

|-材质 BlinnPhongMaterial - 纹理earth.png

ResourceDemo.ts:

Laya.Texture2D.load("res/threeDimen/texture/earth.png", Laya.Handler.create(null, function(tex):void {//使用纹理var earth1 = scene.addChild(new Laya.MeshSprite3D(Laya.PrimitiveMesh.createSphere(5, 32, 32))) as Laya.MeshSprite3D;earth1.transform.translate(new Laya.Vector3(17, 20, 0));var earthMat = new Laya.BlinnPhongMaterial();earthMat.albedoTexture = tex;earthMat.albedoIntensity = 1;earth1.meshRenderer.material = earthMat;
}));

显示效果

五 网格加载

下面加载猴子网格,并赋值给一个模型。

|- 网格MeshSprite3D

猴子组成 = -|

|- 材质 (没有材质,猴子是白色的)

Laya.Mesh.load("res/threeDimen/skinModel/LayaMonkey/Assets/LayaMonkey/LayaMonkey-LayaMonkey.lm", Laya.Handler.create(this, function(mesh) {var 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(5, 3, 13));
}));

显示效果 

六  预设加载

下面加载预设,一只猴子。

|- 猴子网格

猴子预设(精灵) = 猴子模型 -|

|- 猴子材质 - 猴子纹理

Laya.Sprite3D.load("res/threeDimen/skinModel/LayaMonkey/LayaMonkey.lh", Laya.Handler.create(null, function(sp){var layaMonkey2 = scene.addChild(sp);layaMonkey2.transform.localScale = new Laya.Vector3(4, 4, 4);layaMonkey2.transform.translate(new Laya.Vector3(-10, 13, 0));
}));

显示效果。 猴子添加到舞台后,是带动画的。

七 加载动画

下面加载一个胖子预设,并给胖子预设增加一个动画。

如果没Laya.AnimationClip.load加载动画的话,胖子是静止的。

|- 胖子网格

|   胖子模型  -|

胖子预设 = -|                     |- 胖子材质 - 胖子纹理

|

|  动画组件   -| 动画状态1 - 动画 lani

-| 动画状态2 - 动画2 lani

//加载胖子精灵
Laya.Sprite3D.load("res/threeDimen/skinModel/BoneLinkScene/PangZiNoAni.lh", Laya.Handler.create(null, function(sp) {let pangzi:Laya.Sprite3D;pangzi = scene.addChild(sp);pangzi.transform.localScale = new Laya.Vector3(4, 4, 4);pangzi.transform.translate(new Laya.Vector3(10, 20, 0));//获取动画组件let pangziAnimator:Laya.AnimatorpangziAnimator = pangzi.getChildAt(0).getComponent(Laya.Animator);//AnimationClip的加载要放在Avatar加载完成之后Laya.AnimationClip.load("res/threeDimen/skinModel/BoneLinkScene/Assets/Model3D/PangZi-Take 001.lani", Laya.Handler.create(null, function(aniClip) {//创建动作状态var state1 = new Laya.AnimatorState();//动作名称state1.name = "hello";//动作播放起始时间state1.clipStart = 0 / 581;//动作播放结束时间state1.clipEnd = 581 / 581;//设置动作state1.clip = aniClip;//设置动作循环state1.clip.islooping = true;//为动画组件添加一个动作状态pangziAnimator.addState(state1);//播放动作pangziAnimator.play("hello");}));
}));

实际显示效果

八 加载粒子

粒子就是一个lh,就是一个预设

 Laya3D.init(0, 0);Laya.stage.scaleMode = Laya.Stage.SCALE_FULL;Laya.stage.screenMode = Laya.Stage.SCREEN_NONE;Laya.Stat.show();var scene:Laya.Scene3D = Laya.stage.addChild(new Laya.Scene3D()) as Laya.Scene3D;var camera:Laya.Camera = scene.addChild(new Laya.Camera(0, 0.1, 100)) as Laya.Camera;camera.transform.translate(new Laya.Vector3(0, 2, 4));camera.transform.rotate(new Laya.Vector3( -15, 0, 0), true, false);Laya.Sprite3D.load("threeDimen/particle/ETF_Eternal_Light.lh",Laya.Handler.create(this,function(sprite:Laya.Sprite3D):void{scene.addChild(sprite) as Laya.Sprite3D;}))

显示效果

九 批量预加载

2D中使用Laya.loader.load批量加载资源

3D中使用Laya.loader.create批量加载资源

//批量预加载方式
PreloadingRes(){//预加载所有资源var resource:Array = ["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.onPreLoadFinish));
}
onPreLoadFinish() {//初始化3D场景_scene = Laya.stage.addChild(Laya.Loader.getRes("res/threeDimen/scene/TerrainScene/XunLongShi.ls"));//获取相机var camera = _scene.getChildByName("Main Camera");//设置相机清楚标记,使用天空camera.clearFlag = Laya.BaseCamera.CLEARFLAG_SKY;//调整相机的位置camera.transform.translate(new Laya.Vector3(0, 45, -60));camera.transform.rotate(new Laya.Vector3(0, 180, 0), false, false);//相机视角控制组件(脚本)camera.addComponent(CameraMoveScript);
}

三 Laya3D 加载资源 (场景/预设/模型网格/材质/动画文件/贴图/粒子)相关推荐

  1. 【Unity3D 打斗游戏开发】之二 异步加载场景或预加载资源后进入游戏

    假设当前场景为A,我们要切换到下一场景B,如果使用正常加载方式,Unity会在切换场景时加载场景B的所有内容(Hierarchy面板内容)到内存中,由于加载场景B是同步执行的,所以当场景B较大时,就会 ...

  2. Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)

    异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel("yourSc ...

  3. 用户从服务器上获取信息资源,从服务器端获取资源动态加载到场景.docx

    从服务器端获取资源动态加载到场景 [unity3d]从服务器端获取资源动态加载到场景分类:编程语言/C语言/文章我们的游戏制作完发布出去提供给玩家,为了给玩家带来更好的游戏体验,要做各种的优化以及设计 ...

  4. C# OpenCV人脸检测(三) DNN加载FaceDetectorYN模型做人脸检测

    点击下方卡片,关注"OpenCV与AI深度学习"公众号 视觉/图像重磅干货,第一时间送达 本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍C# OpenCV人 ...

  5. 关于unity 中使用AssetBundle加载资源,shader偶尔会丢失的问题解决办法

    问题描述: 因为项目中要进行热更新设计,所以用unity官方推荐的打包方式assetbundle进行打包,打包好了以后再电脑上运行正常,但是当发布到android上后发现偶尔场景背景会出现空白,多方查 ...

  6. Unity—AssetBundle的打包及四种加载资源方式

    AssetBundle打包:脚本放在Editor文件夹内 具体代码如下: using UnityEditor; using System.IO;public class CreateAssetBund ...

  7. Addressable系统的加载资源API总结

    你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦. 大智:"小新,这周学习有没有遇到什么问题呢?" 小新:"确实遇到了,那个Addressabl ...

  8. On-Demand Resources Guide中文版(按需加载资源--下)

    本文由唧唧歪歪翻译自Apple文档 On-Demand Resources Guide  该文档的上部分包含:按需加载资源基础以及创建和编辑tag两部分 (三)管理按需加载资源 下载和管理按需加载资源 ...

  9. iOS和tvOS游戏按需加载资源简介

    2019独角兽企业重金招聘Python工程师标准>>> 戴维营教育翻译:感谢Davis Allie的An Introduction to On-Demand Resources on ...

最新文章

  1. 一篇价值百万的文章:我为什么在22岁辞去年薪150万的工作?
  2. Stella 知识库--解析论坛的架构(1)
  3. Shiro实现认证_ini
  4. 二叉搜索树的查询操作《算法导论》12.2
  5. 史上最强CP!程序猿+喵星人
  6. ie9怎么开兼容模式
  7. 怎么才能更好的掌握Python这门语言?该怎么学呢?
  8. 使用Python SocketServer快速实现多线程网络服务器
  9. Java 9中的5个功能将改变您开发软件的方式(还有2个不会)
  10. ruby hash方法_Ruby中带有示例的Hash.length方法
  11. php点加等于0,php 做数学运算时结果为0的原因
  12. Java web中使用JQuery加载某页面后,自动调用Servlet(GET方法,POST方法)
  13. 关于项目中的封装、重构
  14. [Python] np.ones_like(ndarray)和np.zeros_like(ndarray)
  15. D3.js学习(一)
  16. VMRC 控制台的连接已断开 for win8 vsphere5.0
  17. 2019年南京大学计算机考研复试机试真题
  18. android添加一层半透明,android – 在imageview上添加半透明叠加层
  19. Informatic学习总结_day03_update组件学习
  20. BP神经网络详解+原理

热门文章

  1. SpringCloud项目打包部署
  2. 一针见血的工作励志语录
  3. 威纶和s7200通讯线_S7-200与威纶通触摸屏之间的通讯.doc
  4. [元带你学NVMe] 设备自测试操作(NVMe Device Self-test Operations) 详解与实战
  5. 基于AntDesign UI的自定义表单
  6. maven切换镜像源
  7. 数仓巨头在中国落幕,Teradata 退出国内市场!
  8. Java-对象相等判断
  9. 2018-2019 C++程序设计报告
  10. 小猪o2o提现配置之二小猪o2o生活通v14.17中客户微信支付后商户提现和平台提现设置网页企业付款软件安装