三 Laya3D 加载资源 (场景/预设/模型网格/材质/动画文件/贴图/粒子)
参考:
资源概述
一 常用资源类型
场景 .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 加载资源 (场景/预设/模型网格/材质/动画文件/贴图/粒子)相关推荐
- 【Unity3D 打斗游戏开发】之二 异步加载场景或预加载资源后进入游戏
假设当前场景为A,我们要切换到下一场景B,如果使用正常加载方式,Unity会在切换场景时加载场景B的所有内容(Hierarchy面板内容)到内存中,由于加载场景B是同步执行的,所以当场景B较大时,就会 ...
- Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel("yourSc ...
- 用户从服务器上获取信息资源,从服务器端获取资源动态加载到场景.docx
从服务器端获取资源动态加载到场景 [unity3d]从服务器端获取资源动态加载到场景分类:编程语言/C语言/文章我们的游戏制作完发布出去提供给玩家,为了给玩家带来更好的游戏体验,要做各种的优化以及设计 ...
- C# OpenCV人脸检测(三) DNN加载FaceDetectorYN模型做人脸检测
点击下方卡片,关注"OpenCV与AI深度学习"公众号 视觉/图像重磅干货,第一时间送达 本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍C# OpenCV人 ...
- 关于unity 中使用AssetBundle加载资源,shader偶尔会丢失的问题解决办法
问题描述: 因为项目中要进行热更新设计,所以用unity官方推荐的打包方式assetbundle进行打包,打包好了以后再电脑上运行正常,但是当发布到android上后发现偶尔场景背景会出现空白,多方查 ...
- Unity—AssetBundle的打包及四种加载资源方式
AssetBundle打包:脚本放在Editor文件夹内 具体代码如下: using UnityEditor; using System.IO;public class CreateAssetBund ...
- Addressable系统的加载资源API总结
你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦. 大智:"小新,这周学习有没有遇到什么问题呢?" 小新:"确实遇到了,那个Addressabl ...
- On-Demand Resources Guide中文版(按需加载资源--下)
本文由唧唧歪歪翻译自Apple文档 On-Demand Resources Guide 该文档的上部分包含:按需加载资源基础以及创建和编辑tag两部分 (三)管理按需加载资源 下载和管理按需加载资源 ...
- iOS和tvOS游戏按需加载资源简介
2019独角兽企业重金招聘Python工程师标准>>> 戴维营教育翻译:感谢Davis Allie的An Introduction to On-Demand Resources on ...
最新文章
- 一篇价值百万的文章:我为什么在22岁辞去年薪150万的工作?
- Stella 知识库--解析论坛的架构(1)
- Shiro实现认证_ini
- 二叉搜索树的查询操作《算法导论》12.2
- 史上最强CP!程序猿+喵星人
- ie9怎么开兼容模式
- 怎么才能更好的掌握Python这门语言?该怎么学呢?
- 使用Python SocketServer快速实现多线程网络服务器
- Java 9中的5个功能将改变您开发软件的方式(还有2个不会)
- ruby hash方法_Ruby中带有示例的Hash.length方法
- php点加等于0,php 做数学运算时结果为0的原因
- Java web中使用JQuery加载某页面后,自动调用Servlet(GET方法,POST方法)
- 关于项目中的封装、重构
- [Python] np.ones_like(ndarray)和np.zeros_like(ndarray)
- D3.js学习(一)
- VMRC 控制台的连接已断开 for win8 vsphere5.0
- 2019年南京大学计算机考研复试机试真题
- android添加一层半透明,android – 在imageview上添加半透明叠加层
- Informatic学习总结_day03_update组件学习
- BP神经网络详解+原理
热门文章
- SpringCloud项目打包部署
- 一针见血的工作励志语录
- 威纶和s7200通讯线_S7-200与威纶通触摸屏之间的通讯.doc
- [元带你学NVMe] 设备自测试操作(NVMe Device Self-test Operations) 详解与实战
- 基于AntDesign UI的自定义表单
- maven切换镜像源
- 数仓巨头在中国落幕,Teradata 退出国内市场!
- Java-对象相等判断
- 2018-2019 C++程序设计报告
- 小猪o2o提现配置之二小猪o2o生活通v14.17中客户微信支付后商户提现和平台提现设置网页企业付款软件安装