前言
上个月陆续给大家更新了cocos和unity的面试题,相信读者朋友们看了之后多多少少也有了一些收获,在之前的分享中,有部分读者粉丝一直私信阿博,让我分享一些金九银十服务器和Laya的面试题,让大家都能赶着去面试。
所以,今天阿博就来给大家分享关于Laya的面试题了!!!
啥?今天阿博怎么这么直接,不墨迹了
这不还在国庆放假,大家还在休息嘛! 咱们就化繁为简,直接点,进入正题不好吗?
那么接下来就请各位读者朋友好好看、好好学咯!!!
请仔细查阅~
================================================================================================
问题1: LayaBox 的发展经历了哪些阶段?
LayaBox 1.x出来的时候主要是解决了FLASH网页游戏转成H5页游,转手游。将Flash的AS转成H5的代码,然后在跑自己的内核来驱动H5的代码。后来随着Flash没落,H5兴起,LayaBox发展成性能最好的次世代H5游戏引擎,后来也支持了手游。
LayaBox2.x阶段进一步优化了3D游戏引擎,并支持了微信小游戏,抖音小游戏,QQ小游戏等。开发语言同时支持了JavaScript/TypeScript/ActionScript
LayaBox 下一个阶段目标主要有两个,第一个是进一步完善LayaAir的引擎,让他成为最好用的游戏引擎之一,同时推出了LayaME,做UGC。
问题2: LayaBox 做3D H5 小游戏到底怎么样?
LayaBox做的3D微信小游戏在小游戏市场份额中占90%以上, 是非常成熟的H5小游戏开发引擎,同时也可以打包发布到Native平台。
问题3: Laya与Unity 之间到底是如何配合的呢?
Laya 有自己的引擎内核,有自己的开发工具,同时他也巧妙的用了Unity的编辑器,他是如何来做的呢?Laya 引擎内核是独立的,纯代码开发完整的游戏引擎,同时游戏引擎也要提供工具,2D编辑器,是Laya自己提供的,3D编辑器Laya没有自己做而是用了Unity来编辑场景,然后再工具把Unity编辑的场景和角色预制体转成Laya可以使用的格式,这样3D引擎和3D资源就可以用市场比较成熟的Unity,好用,很多资源可以共用,而且市场很多U3D开发的3D游戏,Laya这样做能将这些游戏转成H5的小游戏。
问题4: Laya 到底使用J avaScript 开发好还是使用T ypeScript 开发好?
JavaScript是弱类型编程语言,开发比较灵活,TypeScript对类型的要求比较严格,从灵活性来说Js更灵活,但是灵活的同时,等项目带了不好维护,所以很多公司慢慢的倾向于选择强类型的TypeScript来开发。TypeScript底层运行是是JS,所以建议先学习JS再学习TS
问题5: Laya 如何使用图集?
Laya 在做UI的时候,没有图集的概念,直接用单个小图片,UI制作完成以后,Laya会根据文件夹为我们把一个文件夹内的图片自动生成一个图集,如果文件过大,这个文件默认不会打包到图集,一般的图片默认是生成到图集的,如果你想这个图片不生成到图集,可以指定这个图片的类型为不打包。图集的使用能提升绘制性能,节约DrawCall。
问题6: Laya 3D 摄像机有哪些模式?
Laya里面摄像机有两种模式,一种是透视摄像机,一种是正交摄像机,这两种摄像机决定了两种不同的投影成像的方式。如下图:
正交摄像机直接投影到屏幕成像
问题7: Laya 3D 物体结果与U nity 有什么区别?
Laya 的3D物体与Unity还是有区别的,Unity是GameObject + [Transform, MeshRender等组件], 而Laya里面是MeshSprite3D包含了MeshRenderer, 并且继承自Sprite3D,Sprite3D里面包含了数据成员transform。所以和Unity的纯组件开发有一些不一样。
问题8: Laya.Scrip 与L aya.Script3D 有什么区别?
Laya 里面有两个代码组件类,一个是Laya.Script, 一个是Laya.Script3D,这两个有什么区别呢?记住一条,2D节点上只能挂Laya.Script, 3D节点上只能挂Laya.Script3D。
问题9: Laya UI 里面如何换图片?
Laya Image里面有个skin指向的是图片的路径的字符串,当我们要换图片的时候,只需要将Image的数据成员skin,设置为图片的路径,如果要加载网络图片,也只需要将skin设置成http的一个网络地址。
问题10: Laya 组件化开发的固定入口?
Laya写脚本的代码的时候是组件化开发,和Unity类似,接口也和Unity相似,不过前面加了一个on, 如下:
onAwake:组件实例加载的时候调用。
onStart: 组件实例在第一次update之前调用
onUpdate: 组件实例在每次画面刷新的时候调用
onFixedUpdate(): 组件实例以固定的时间间隔调用。
onDestroy(): 组件实例删除的时候调用。
…
接口很多与Unity类似,所以Unity开发人员很快就能上手Laya。
问题11: Laya 如何做第三方资源部署?
开发微信抖音小游戏的时候,如果包体超过了大小我们需要把资源部署到第三方的服务器上,Laya为我们提供了第三方部署的方法,只需要设置资源的urlRoot就可以了。
问题12: Lay a 如何裁剪引擎的体积?
打开游戏场景,按住F9, 弹出项目设置对话框。你可以对你用到的库来进行设置,不用的就不要勾选上这样能减少游戏引擎的体积。如图:
问题13: Laya 如何播放粒子特效?
粒子特效的节点为Laya. ShuriKenParticle3D,我们通过场景的节点查找函数获取到粒子节点,获取粒子节点后,里面有个数据成员particleSystem就是粒子的播放的控制,我们只要调用: ((节点 as Laya.ShuriKenParticle3D).particleSystem).play()。
问题14: 3D 游戏里面如何监听触摸事件?
3D里面我们使用舞台来进行事件监听,Laya.stage.on(Laya.Event.MOUSE_DOWN, this, this.onTouchStart);
Laya.stage.on(Laya.Event.MOUSE_UP, this, this.onTouchEnd);
Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.onTouchMove);
问题15: 微信小游戏如何监听进入后台与回到游戏事件?
if (Laya.Browser.onWeiXin) {
wx.onShow(this.onEnterFrount.bind(this));
wx.onHide(this.onEnterBackGround.bind(this));
}
问题16: Laya 如何加载Unity 导出的3D 游戏场景?
Laya.Scene3D.load(“资源路径”,
Laya.Handler.create(this, function (scene3d) {
// 加载完成的回调
}));
问题17: Laya 如何加载Unity*导出的预制体?
Laya.Sprite3D.load(“资源路径”,
Laya.Handler.create(this, function (sprite3d) {
// 加载成功的回调
}));
问题18: 如何正确的使用U nity 来辅助开发Laya 项目?
Laya的3D编辑器是Unity, 这里要注意几个问题,而且非常重要。
1: 注意一定要使用laya for unity插件指定的Unity版本,这个真的很重要,很多问题都有可能是它引起的,比如场景性能很差等。
2: 一定要按照laya的支持规范来使用相关的操作,比如Laya兼容组件,Laya兼容的Shader。
问题19: Laya 如何切换材质?
r = ("节点" as Laya.MeshSprite3D).meshRenderer;
r.material = 材质对象;
问题20: Laya 如何播放背景音乐?
Laya.SoundManager.playMusic(soundPath, 次数,
Laya.Handler.create(this, this.onSoundPlayEnd));
问题21: Laya 的项目目录结构有哪些?
bin: 存放运行时候的代码库,资源等,运行时候的数据所在的目录,非常重要。
laya: 2D UI 场景视图,资源所在的文件夹,专门用来做2D编辑的。
libs: 游戏引擎所在的库的目录,当前项目使用的Laya引擎代码库所在目录。
release: 打包发布到各个平台的发布路径。
src: 代码所在的路径
laya文件: Laya工程项目文件。
tsconfig.json: ts代码相关的一些设置。
问题22: Laya 如何升级引擎?
这里有一个误区,大家都以为只要重新安装了LayaAir的IDE,用新的IDE打开了老的项目就已经升级成功了引擎版本。其实并没有升级引擎版本,还需要把新引擎的库拷贝到项目,如菜单所示:文件-》项目-》类库管理, 选择版本,点击”应用”即可
问题23: Laya 如何正确的做资源管理和使用资源?
Laya资源加载都是基于异步的,如果是H5游戏,有些资源可能要从服务器下载下来,再加载到内存,所以这个”时间段”会导致黑屏(无内容)与闪烁,所以使用Laya的资源的时候最好做好资源管理的预加载机制,你后面要使用什么资源先预加载进来,这样就可以避免黑屏与内容闪烁,避免由于资源加载照程的卡顿。
问题24: Laya如何监听物理碰撞?
Laya物理引擎的碰撞检测其实非常简单,只需要在物理刚体所在的节点添加脚本,在脚本里面重载下面的接口即可检测到物理碰撞
问题25:Laya 物理引擎支持哪些碰撞器?
SphereColliderShape 球体碰撞器
BoxColliderShape 盒型碰撞器
CapsuleColliderShape胶囊碰撞器
CylinderColliderShape圆柱碰撞器
ConeColliderShape圆锥碰撞器
MeshColliderShape网格碰撞器
问题26: Laya使用Unity导出天空盒要注意哪些事项?*
1:导出的天空盒cubeMap 需要勾选 Readable选项
2:导出的天空盒材质必须使用LayaAir下的天空盒材质
问题27: Laya 拖尾的参数有哪些?
Time 拖尾生存时长
minVertexDistance 最小拖尾片段距离
width 拖尾宽度设置(可以为宽度曲线)
Color 采用 colorGradient 方式设置,有两个可选模式
Fixed 固定模式
Blend 混合模式
texture Mode 纹理模式,与普通纹理模式相同。
Stretch 可沿着轨迹的整个长度应用纹理贴图
Tile 使纹理沿着轨迹的长度平铺
alignment 轨迹准线
ALIGNMENT_VIEW 可以使轨迹面向摄像机
ALIGNMENT_TRANSFORM_Z 根据轨迹的变换组件的方向对齐
问题28: Laya如何使用静态合批?
Laya使用静态合批非常的简单,在Unity中对需要使用静态合并的模型勾选 Static 静态选项导出即可。如图所示:
问题29: Laya里面动态合批的原则
Laya里面动态合批,是自动完成的不需要开发人员做相关操作,动态合批分为两种,实例合并与顶点合并,他们的条件要求如下:
实例合并:
需要同Mesh和同材质双条件满足。在三维场景中同Mesh同材质的模型还是可能大量存在的,在这时实例合并有不小的发挥空间。
顶点合并:
需要同材质且模型顶点小于10个。顶点合并目前在一些假阴影和特效模型上有发挥空间。
注意:半透明的物体需要连续渲染才能动态合并,所以半透明物体的动态合并几率低。
问题30: LayaIDE如何清理缓存?
开发者在使用IDE的时候,有时候会报出一些错误,有的时候直接忽略即可。有的时候,需要重启IDE才可以解决。也有的时候重启也解决不了。这个时候。我们建议开发者先清理缓存来解决。因为大多数情况都是缓存的问题导致。
在IDE导航的帮助菜单里有一个选项叫“打开编辑器本地缓存”,如图所示。通过点击这里,可跳转到缓存的资源目录。
缓存目录打开后,如图2所示。如果是布局问题,可以直接删除layout目录。如果也不清楚什么问题。所有看到的目录和文件都删干净也没关系。
问题31: Laya 3D物体显示有锯齿怎么办?**
由于3D抗锯齿默认是开启的,但有的开发者发现锯齿感还是很明显,如果是采用了2.2或更高版本的引擎,那就需要检查是否使用了HDR和后期处理。
webGL 1.0不支持renderTarget有抗锯齿,使用相机HDR和后期处理管线的BloomEffect泛光效果就会引起抗锯齿无效。解决办法就是不要使用这两块功能,后期处理一般来说,开发者用的不多。
HDR是要特别注意的,在Unity里导出资源时,不要勾选HDR相关选项。如果不小心勾了,不想重新导出的。也可以在项目代码里强制HDR效果。示例代码如下:
this.camera = new Laya.Camera(0, 0.1, 100);
this.camera.enableHDR = false; //关闭HDR
问题32: Laya如何可能一个3D物体?
我们经常需要在游戏里面大量复制同一个物体,那么如何clone一个物体呢?Laya提供了接口来clone, Laya.Sprite3D.instantiate(物体)。
最后
今天的Laya面试习题就给大家分享到这里了,欢迎读者朋友们在评论区留言,今天的内容到此结束!
当然还有,今天的面试集锦大礼包已经分享出来啦~ 有需要获取的读者朋友,欢迎来后台私信阿博:面试 就可以获取了哦
那么,下篇再会,敬请期待!