【干货分享】LayaBox CEO谢成鸿对2017年HTML5行业的思考!

思考的干货概括2017年是HTML5行业真正的爆发起始年,市场规模将达到50-100亿,并在2018年以更快的速度增长,中国游戏产业格局会因此发生一些变化,会...
  • 2017-01-20

Tri-Ace:在Shader里近似渲染公式

  继上一篇:次世代基于物理渲染的反射模型,本篇是Tri-Ace 在cedec2014上最近发布的,  主要内容如名称所示,解释了他们在实现基于物理渲染时,对...
  • 2017-01-16

将Unity发布的apk变成系统应用 禁止卸载

  在安卓手机上我们经常会发现有一些预装的应用,不能卸载。  今天我们实现的就是 将unity发布的游戏,也让它变成系统应用,禁止正常卸载。  这个功能我们一般不会用到,它适用于特殊环境,比如运营商卖合约机前 是要先绑定一些自己的应用,再往出卖~~  在实现之前,我们需要先将手机开启root权限。具体root方法某度有很多,自行解决。(root后风险概不无责哦)  root成功后,再做一些准备工作。第一步: 通过数据线连接手机并准备好apk文件第二步:获取apk文件下的.so文件,这里需要解压工具。解压后,.so动态库文件在“\lib\armeabi-v7a”下。第三步:已安装android sdk,可以使用adb命令。第四步:打开winows菜单——运行(或键盘按“win+R”),输入cmd命令,点击确定,进入命令模式下。这里可以输入“adb version” 测试是否可以使用adb命令  准备工作到此结束,下面开始重点第五步:在命令行输入下面命令  开启服务: ?1adb start-server  开启root权限:?1adb root  开启写入权限: ?1adb remount第六步:进入安卓命令行 创建目录 ?1adb shell进入app目录: ?1cd system/app  创建apk存放目录,及lib目录:  wangchongchong为apk存放目录, arm为.so文件存放目录?1mkdir -p wangchongchong/lib/arm第七步:将apk文件及.so文件导入手机中  退出安卓命令行:?1exit  将apk文件导入手机 这里替换为自己的文件位置和导入位置:?1adb push C:\Users\Page\Desktop\Test\网虫虫.apk system/app/wangchongchong  打开.so文件所在目录,目录位置在第二步。(因为我测试的空场景,所以只有三个.so文件)在该目录里 按住Shift+鼠标右键,选择“在此处打开命令窗口”。  打开后,输入命令 将该目录下的所有.so文件导入手机arm目录下?1adb . system/app/wangchongchong/lib/arm/第八步:截止到此,我们的所有导入工作都完成了。可以从第六步再检查下操作的是否准确。  确认无误后,可以 执行reboot命令 重启手机了。?1adb reboot  当重启完毕后,看看是否已经自动安装上了自己的游戏呢。然后你再测试下,还能不能删除,如果删除不了。就说明已经成功了。
  • 2017-01-20

Unity3D学习笔记之注视旋转(Quaternion.LookRotation)详解

  Unity3D游戏开发需要学的东西有很多,下面要给大家介绍的是注视旋转(Quaternion.LookRotation)的实现方法,一起来看看吧。    编写怪物位置看到目标点,正确写法是Quaternion.lookRotation(Target.positon-Enemy.position)    (Unity3D的坐标,相对这张图片X是横轴,Z是竖轴,下面暂时忽略Y轴)    从世界坐标系[0.0]分别连接点Target,Enemy坐标点得到两个向量(0→Target,0→Enemy),绿色向量(Enemy→Target)代表怪物看到目标点。    由向量加减可得,(0→Target)-(0-Enemy)=(Enemy-Target)。故Quaternion.LookRotation(Target.position-Enemy.position)。
  • 2017-01-20

释放生产力,自动生成游戏配置表读取的代码

说起游戏配置表,不论是游戏程序还是游戏策划,都是每天都在打交道的、最普通不过的东西。相信不少游戏程序员,撸过大量这样的代码:?1234567891011121314151617181920212223242526272829303132333435363738class SkillSetting{    public int Id;    public string Name;    public string Desc;    public int Arg1;    public int Arg2;    public int Arg3;    // .....    // .....} class SkillSettingManager{    // .....    public void Init ()    {        var table = TableReader.Read("jineng.txt")        for (var line = 0; line
  • 2017-01-20

LayaAir HTML5引擎的3D坐标系与矩阵变换

        当看到了很多开发者在社区中提到的问题,80%以上的问题我的内心是崩溃的,感觉到大部分开发者是没有3D基础的,甚至很多连2D基础都没有,很多是因为这项新鲜的3D和VR H5产业吸引了他,然后就跟着官网的示例学习。但我觉得,如果没有3D的基础知识。就算你学会了用各种工具里导出3D资源,又能怎么样呢?即便是了解了一些API可以实现你想要的效果,但不知道3D游戏的原理是什么吗?也很难制作出来一个完整的游戏!所以建议大家在学习LayaAir 3D引擎之前,要先去了解一些3D的基础知识。LayaAir的3D教程文档,未来也尽可能多整理一些初级基础文档,希望大家能认真学习。    3D坐标系        关于3D坐标系,LayaAir 3D与3DMax都是右手坐标系,而unity3D是左手坐标系。我主要讲解laya3d坐标系。        先说轴向问题,看上面右边的图,别看那个诡异的手,伸出你的右手,手面朝着自己,让大拇指指向X轴方向,食指指向Y轴方向,其他的那一堆手指指向Z轴方向,也是指向自己,保持这个姿势,看好自己的右手,凝视它,记住他,这就是LayaAir 3D的坐标系,理解他,以后在3D场景中对物体进行平移旋转操作不要太简单。左手坐标系,同理,但一定要记住,LayaAir3D的坐标系统是右手坐标系,你能理解这个,也算我没白撸这些废话。        然后是单位尺度,LayaAir 3D中的单位是米,而不是像素。3DMax中一般默认的系统单位是米,显示单位是毫米。Unity3D中默认的单位也是米。为什么要跟大家介绍这些东西,看下面就知道了,如果大家用过Layabox的fbxTool工具导出过3D模型,然后放到3D场景中,却发现怎么也显示不出来。那是因为,在3Dmax中看到的模型,感觉虽然不大,但那是以毫米为显示单位的,而系统单位是米,实际的模型是他的1000倍大,因为大多数物体都是单面渲染的,内部你是看不到的,因此放到我们LayaAir 3D场景中,你怎么移动照相机位置,也看不到模型,这就是问题所在,可以试试把模型缩小1000倍,此时即可看到。由于Unity3D中的单位尺度与LayaAir 3D相同,所以就不必以上操作。说句工具上的题外话,制作单个模型时,尽量把模型放在3D坐标系原点,会更利于你的开发!        为了让大家更加深入的了解LayaAir 3D坐标系统,在这里我还要介绍一个简单的概念,矩阵变换,这里不做过深入的介绍,你只需要知道它可以控制3D精灵的旋转,平移,缩放即可;        想要深入了解矩阵和3D空间物体的关系,可以仔细研究下我们引擎的源码,或者学习下webGL相关的知识!下来我会向大家介绍,怎么用LayaAir 3D API对空间物体进行矩阵变换也就是旋转平移缩放。        首先我需要在3d空间中,创造点基本的元素,一个平面,一个方体,一个球体。以下我用LayaAir自带的方法创建,这个环节不做过多介绍。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657//初始化3d画布Laya3D.init(0, 0, true);   //设置全屏Laya.stage.scaleMode = Stage.SCALE_FULL;//显示统计数据Stat.show();   //给舞台添加laya3d场景var scene:Scene = Laya.stage.addChild(new Scene()) as Scene;   //初始化照相机var camera:Camera = scene.addChild(new Camera()) as Camera;camera.transform.position = new Vector3(0, 3, 3);camera.transform.rotate(new Vector3( -45, 0, 0), true, false);camera.addComponent(CameraMoveScript);   //生成平面,其实是一个box,只不过高度很小,可看成一个平面var plane:MeshSprite3D = scene.addChild(new MeshSprite3D(new BoxMesh(4,4,0.001))) asMeshSprite3D;var material:StandardMaterial = new StandardMaterial();material.albedo = new Vector4(1.3, 1.3, 1.3, 1);material.diffuseTexture = Texture2D.load("res/threeDimen/layabox.png");plane.meshRender.material = material;   //生成坐标中心,其实是球体var sphere:MeshSprite3D = scene.addChild(new MeshSprite3D(new SphereMesh(0.05,100,100))) as MeshSprite3D;var material:StandardMaterial = new StandardMaterial();material.albedo = new Vector4(0, 0, 0, 1);sphere.meshRender.material = material;sphere.transform.position = new Vector3(0, 0, 0);   //模拟x轴,其实是方体var x:MeshSprite3D = scene.addChild(new MeshSprite3D(new BoxMesh(2,0.03,0.03))) asMeshSprite3D;var material:StandardMaterial = new StandardMaterial();material.albedo = new Vector4(1, 0, 0, 1);x.meshRender.material = material;x.transform.position = new Vector3(1, 0, 0);   //模拟y轴,其实是方体var y:MeshSprite3D = scene.addChild(new MeshSprite3D(new BoxMesh(0.03,0.03,2))) asMeshSprite3D;var material:StandardMaterial = new StandardMaterial();material.albedo = new Vector4(0, 1, 0, 1);y.meshRender.material = material;y.transform.position = new Vector3(0, 0, 0);   //模拟z轴,其实是方体var z:MeshSprite3D = scene.addChild(new MeshSprite3D(new BoxMesh(0.03,2,0.03))) asMeshSprite3D;var material:StandardMaterial = new StandardMaterial();material.albedo = new Vector4(0, 0, 1, 1);z.meshRender.material = material;z.transform.position = new Vector3(0, 0, 1);   //生成方体var box:MeshSprite3D = scene.addChild(new MeshSprite3D(new BoxMesh(0.3,0.3,0.3))) asMeshSprite3D;var material:StandardMaterial = new StandardMaterial();material.albedo = new Vector4(0.5, 0.5, 0.5, 1);box.meshRender.material = material;         以上是该程序执行的效果,有一个平面,有一个模拟的LayaAir 3D坐标系,红色的为x轴,绿色的为y轴,蓝色的为z轴,还有一个处于坐标原点的正方体,看到这里,我想大家对laya3d坐标系有了更深的了解!         下来我简单介绍下Transform3d这个类的一些简单属性,看下面的代码和注释。12345678910111213141516171819//设置世界位置,会使这个方体在整个世界坐标系的绝对位置为(x,y,z)box.transform.position = new Vector3(x, y, z); //设置局部位置,会使这个方体在父节点坐标系的相对位置为(x,y,z)//如果没有加入别的节点中,则position与localPosition的效果相同box.transform.localPosition = new Vector3(x, y, z); //设置世界旋转,会使这个方体根据世界坐标系的坐标轴进行旋转//Quaternion四元数,常用来表示3d旋转,可以根据各个轴的旋转弧度计算出//Quaternion.createFromYawPitchRoll(yaw:Number, pitch:Number, roll:Number, out:Quaternion)box.transform.rotation = new Quaternion(x, y, z, w); //设置局部旋转,会使这个方体根据自身坐标系的坐标轴进行旋转//如果没有进行过旋转,则rotation与localRotation效果相同box.transform.localRotation = new Quaternion(x, y, z, w); //设置局部缩放,会使这个方体根据自身坐标轴方向进行缩放(x, y, z)倍box.transform.localScale = new Vector3(x, y, z);        对于没有接触过3D的同学,会对上面解释也许有些模糊,尤其对世界和局部有什么区别?下面将着重介绍介绍Transform3D两个方法,并在实践中向大家具体介绍。        第一步:在原始没进行过任何旋转的基础上进行旋转12345678910/** * 旋转变换。 * @param   rotations 旋转幅度。 * @param   isLocal 是否局部空间。 * @param   isRadian 是否弧度制。 *///1.先对box,进行绕x轴世界旋转90度,//box.transform.rotate(new Vector3(90, 0, 0), false, false);//或者对box,进行绕x轴局部旋转90度,因为没有被旋转过,世界坐标轴和局部坐标轴相同,效果是一样的.box.transform.rotate(new Vector3(90, 0, 0), true, false);      上图,上边为原始的,下边为绕x轴进行世界/局部旋转后的效果。        第二步:在步骤一的基础上,先进行局部旋转    12//2.对box,进行绕z轴局部旋转90度,box.transform.rotate(new Vector3(0, 0, 90), true, false);        上图,上边为第一步旋转后的,下变为本次局部旋转后的效果,为什么会出现现在的效果呢,因为当第一步进行旋转时,box内部的坐标系跟着同时旋转了,动动脑子,脑补下,进行第一步旋转后,z轴不再朝向你,而是朝向下面。        第三步:在步骤一的基础上,进行世界旋转12//3.对box,进行绕z轴世界旋转90度,box.transform.rotate(new Vector3(0, 0, 90), false, false);        上图,上边为第一步旋转后的,下边为本次世界旋转后的效果,这个很好理解,就是绕着世界坐标系坐标轴的z轴进行旋转。还有一个小规律,旋转的方向问题,当旋转值为正时,旋转方向为你正对着该旋转轴的正方向的逆时针方向,自己理解。       第四步:在步骤一的基础上,进行局部平移。1234567/** * 平移变换。 * @param   translation 移动距离。 * @param   isLocal 是否局部空间。 *///4.对box,进行x轴方向局部平移1米,box.transform.translate(new Vector3(0, 1, 0), true);        上图,上边为第一步旋转后的,下边为本次进行局部移动后的,由于进行了第一步的旋转,box内部的坐标轴y轴朝向的是自己,所以会看到box向自己移动了1米的距离。        第五步:在步骤一的基础上,进行世界平移,到这里,我相信大家心中都会有正确的答案了,上代码的答案。12//5.对box,进行x轴方向世界平移1米,box.transform.translate(new Vector3(0, 1, 0), false);        上图,上边为第一步旋转后的,下边为本次进行世界移动后的,box不受自身影响,会向世界坐标系的y轴进行移动1米的距离。有的人或许有疑问,position/localPosition和translate有什么不同,前者是直接设置位置,后者是在当前位置基础上移动相应的距离,旋转同理。                 看到这里,相信大家对LayaAir 3D坐标系已经有了进一步的了解,同时也对3d精灵的矩阵变换有了更多的了解,反复阅读本节内容,相信您能在LayaAir引擎的3D场景中熟练的操纵任何一个物体的旋转平移,缩放。
  • 2017-01-20

LayaAir HTML5游戏引擎简介、特性、功能概述

        LayaAir是Layabox旗下的第二代HTML5开源引擎。是全球唯一支持ActionScript3、JavaScript、TypeScript三种开发语言,并且一次开发同时发布APP、HTML5、Flash三个版本的游戏引擎,也是全球首款基于HTML5协议的全能型开源引擎。除支持2D、3D、VR、AR的游戏开发外,引擎还可以用于应用软件、广告、营销、教育等众多领域。        LayaAir引擎是一套全新设计的精简API的游戏引擎,具有极致的性能、轻量易用、支持多语言开发、API功能齐全、工具链完善高效、开源免费、支持多版本发布等特点。极致性能        LayaAir引擎同时支持WebGL与Canvas渲染。优先使用webgl渲染(当WebGL不可用时,自动无缝转换为canvas渲染)。引擎设计过程中以性能为优先原则进行极致优化,在谷歌等优秀的浏览器环境下运行性能媲美Unity3D等APP原生引擎。LayaAir拥有多款APP级的已上线2D游戏精品和3D游戏精品,证明LayaAir引擎的流畅性能。轻量易用        LayaAir引擎 API设计上追求精简,简单易用,上手容易,引擎本身非常注意自身大小,是目前同等功能最小的HTML5引擎。支持多语言开发        LayaAir引擎同时支持ActionScript3、TypeScript、JavaScript三种语言开发HTML使用任意一种自己喜欢的语言开发即可。功能齐全        LayaAir引擎同时支持2D,3D,VR ,AR,时间轴动画,缓动、UI系统、粒子动画、骨骼动画、物理系统等。工具链完善高效        LayaAir引擎除提供可视化的集成式开发环境LayaAirIDE编辑器外,还支持大量主流的第三方工具链,如:Unity3D、TiledMap、Spine、DragonBones等。建立了完善的工具链生态,可视化的编辑器,清晰的工作流,让美术,策划,程序紧密配合,大幅提升开发效率。开源免费         LayaAir引擎遵循MIT开源协议,源码免费使用,包括商用。并将引擎源码全部开源并托管到github(https://github.com/layabox/layaair)。强力的技术支持       LayaAir引擎提供了强力的技术支持,包括官网文档、微信公众号、QQ技术交流群、官网问答社区、在线视频教育的课堂等。     LayaAir引擎开发者中心:http://ldc.layabox.com/     LayaAir引擎微信公众号:LayaboxLayaAir包括引擎库与LayaAir IDE两大核心部分LayaAir引擎库功能LayaAir引擎支持精灵、矢量图、文本、富文本、位图字体、动画、骨骼、音频与视频、滤镜、事件、加载、缓动、时间、网络、UI系统、物理系统、TiledMap、prtocol等API;支持开发2D、3D、VR的产品研发,支持Canvas与WebGL模式,支持同时发布为HTML5、Flash、APP(IOS、安卓)多种版本。其中:laya.core是核心包,封装了显示对象渲染,事件,时间管理,时间轴动画,缓动,消息交互,socket,本地存储,鼠标触摸,声音,加载,颜色滤镜,位图字体等。laya.webgl 包封装了webgl渲染管线,如果使用webgl渲染,可以在初始化时调用Laya.init(1000,800,laya.webgl.WebGL);laya.ani.js是动画模块,包含了swf动画,骨骼动画等。laya.filter.js包含更多webgl滤镜,比如外发光,阴影,模糊以及更多。laya.html.js封装了html动态排版功能。laya.ui.js提供了制作UI的各种组件实现。laya.tilemap.js提供tileMap解析支持。LayaAir IDE功能:LayaAir IDE主要包括代码开发编辑器、可视化编辑器、第三方工具链支持工具等。其中主要功能包括:代码开发UI编辑器粒子编辑器时间轴动画场景编辑器3D支持脚本扩展预设APP打包Flash发布JS混淆与压缩第三方工具链转换工具(SWF、Unity3D、3Dmax、TiledMap、Spine、龙骨……)
  • 2017-01-20

最新问答

更多

【有奖问答】2016年IBM 斩获8088项专利,连续24年位居冠军,其中1000多项AI及认知计算专利,欢迎大家参与讨论

游戏开发社区_Gad-腾讯游戏开发者平台
LambertLiu 2017-01-18 回答了该问题
一、吐槽    这世界上专利太多了,我们公司每年也有申请一百多项专利,然而实际上查处侵权完全跟不上专利申请的脚步啊。二、开心    不过不得不说人工智能还是非常有益于人类、社会的,你看,银行可以自助申卡、办卡了,不用再为办卡去排长队,耗上一整天了,多方便呀。然而,大部分行政办公服务还是要人工来做,所以说人工智能的蓬勃发展实在是迫在眉睫。    人工办事特别麻烦的地方就在于…你要在上班时间去办事…要么是请假,要么是翘班,多么令人狂躁啊,而且关键是,到了办事点,还要取号排队,一排就是半天。三、愿景    现在越来越多的事情都被人工智能替代了,希望未来可以不用在上班时间去办事,大家时间都很宝贵,只要下班去自助服务机办一下就好,多爽。    还有,人工智能还能用来谈恋爱,哈哈哈哈哈哈哈哈哈哈…哈哈哈哈哈哈…配合某岛国的污科技的话…哈哈哈,会碰撞出什么样的火花呢?诶嘿诶嘿诶嘿嘿。
  • 2017-01-10

【有奖问答】坊间一直有一个说法:Unity适合做轻量级的游戏,高品质的大游戏还得靠UE,您怎么看?

游戏开发社区_Gad-腾讯游戏开发者平台
LambertLiu 2017-01-16 回答了该问题
一、附议部分首先,我赞同一楼记忆沙漏的观点,确实UE4的材质与渲染能力会比Unity高,也正因此,UE4对开发环境和运行环境的要求也都比UNITY高。但是,这并不代表Unity适合做轻量级的游戏,因为Unity其实是万能的(双膝跪地状)!Unity的画质也可以很好啊!二、语义分析在游戏界,高画质,不代表高品质!所以我要说的是,高品质游戏,不能单单看一个画质。如果没有创新的玩法、爽快的玩家体验等核心来填充,充其量只是个花瓶,很容易就会使玩家倦怠,甚至根本没有玩下去的欲望。要做出高品质游戏,要有完善的策划与设计,要充分考虑玩家体验。打个比方吧,我玩过一款很垃圾的“高画质游戏”(为防止法律纠纷,就不点名道姓),画质上确实很美观,然而人物操作手感极差、玩家视角控制别扭、怪物高度重复(就换个颜色),一系列的问题,导致这种游戏带给我的体验跌至谷底,玩到第二个CheckPoint就果断卸载了,啊呸呸呸。三、对引擎本身的分析Unity和UE4作为两位引擎届大佬,自然是各有千秋、各领风骚,用它们俩都能做出高品质游戏是毋庸置疑的了。其中Unity强调的是程序员运用API以及自主写码的能力,对开发团队还是有“软门槛”的,说白了就是不会写代码的话,想做好游戏还是有点难度,当然,这个门槛对程序猿大军来说,要入门并不高。而UE4,也许是为了给更多不那么精通代码的人带来便利,用了“蓝图”这种管理方法,这确实给引擎使用的“软门槛”降低了很多,但是另一方面来看,也在极大程度上放大了游戏开发者对UE4的依赖程度,这样的设定很容易造成依赖“蓝图”的开发者们,在若干年后,无论是出于工作的原因,还是创业的需要,如果需要更换引擎,会难以上手,因为他们对代码的熟练度停滞不前。四、总结可能因为我更爱Unity,所以对UE4比较排斥,说了很多我认为的“UE4引擎的缺点”。所谓智者见智仁者见仁,只要你有金点子,再用心去实现游戏的各项功能,无论用哪款引擎,都能做出高品质游戏!而且,穷人还是多啊!你一来就是UE4,别说对开发者电脑的配置要求有多高了,很多玩家根本玩不起啊!做出来受众太窄了,真的不心塞吗,哈哈哈哈。
  • 2017-01-06

阿尔法狗这是真的要逆天了吗

游戏开发社区_Gad-腾讯游戏开发者平台
Mark 2017-01-19 回答了该问题
差不多,至少它有学习能力,而且,它的学习资源是整个互联网的棋类平台,你自己想想人学习下棋的资源有多少?它又有多少?而且它没有思想的束缚,它用的是人类下棋技术的结晶!!!
tag1
  • 2017-01-06

游戏内美术场景如何实现远处剪影和虚化处理?

游戏开发社区_Gad-腾讯游戏开发者平台
frankan 2017-01-13 回答了该问题
1、远景这个纯色一般是fog造成,可以采用的方法是z fade,也就是远处的使用透明的方式来渲染,然后根据深度值来做透明,这样可以有比较好的过度。      但是这个性能消耗也是会偏高,可以在高配情况下使用。2、增强景深?3、可以把贴图和占据屏幕比做一个mipmap(见附件),以及根据贴图大小来做一些debug visualize,看看正常情况下,都用什么大小的图片,做一个准确的选择。另外可以选择根据重要性来做贴图选择,包里带一个较大的贴图,主角使用满分辨率的,其他人使用低分辨率的
  • 2017-01-13
微信扫码关注GAD官方公众号 关注GAD二维码
qq

Gad游戏开发核心用户群

484290331

合作伙伴

  • 游戏开发社区_Gad-腾讯游戏开发者平台 Microsoft
  • 游戏开发社区_Gad-腾讯游戏开发者平台 超维星球孵化器
  • 游戏开发社区_Gad-腾讯游戏开发者平台 白鹭引擎
  • 游戏开发社区_Gad-腾讯游戏开发者平台 开源引擎LayaAir
  • 游戏开发社区_Gad-腾讯游戏开发者平台 腾讯大学