2D和3D游戏开发前端后端区别上有多大区别?

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 27, 距离下一级还需 173 积分
论坛徽章:0
最近,准备换工作,浏览招聘信息时,发现很多游戏公司招聘要求中都有熟悉常用的2d和3的图形算法,可是这些图形算法有哪些呢?望各位不吝赐教哈,先在这里提前谢过了
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
白手起家, 积分 27, 距离下一级还需 173 积分
论坛徽章:0
自己先顶下
白手起家, 积分 27, 距离下一级还需 173 积分
论坛徽章:0
各种路径搜索,DFS,BFS,各种树?
论坛徽章:5
提示: 作者被禁止或删除 内容自动屏蔽
白手起家, 积分 27, 距离下一级还需 173 积分
论坛徽章:0
本帖最后由 skychongrichie 于
11:54 编辑
BlueGuy_ DFS大学的数据结构课上应该有吧,应该算是很基础的。谢回复
论坛徽章:5
提示: 作者被禁止或删除 内容自动屏蔽
论坛徽章:5
提示: 作者被禁止或删除 内容自动屏蔽
白手起家, 积分 27, 距离下一级还需 173 积分
论坛徽章:0
BlueGuy_ 你高中生啊?这么牛?当年我高中的时候连c++是啥都不知道,见笑了哈。言归正传,我还没用DFS求过组合数呢,实际应用中用的最多是遍历某种树形结构,就一个典型的深度优先搜索来说,的确很easy啊
论坛徽章:5
提示: 作者被禁止或删除 内容自动屏蔽
论坛徽章:5
提示: 作者被禁止或删除 内容自动屏蔽2006年4月 专题开发/技术/项目大版内专家分月排行榜第二2005年11月 专题开发/技术/项目大版内专家分月排行榜第二2005年10月 专题开发/技术/项目大版内专家分月排行榜第二2005年8月 专题开发/技术/项目大版内专家分月排行榜第二2005年4月 专题开发/技术/项目大版内专家分月排行榜第二2005年3月 专题开发/技术/项目大版内专家分月排行榜第二2005年2月 专题开发/技术/项目大版内专家分月排行榜第二2005年1月 专题开发/技术/项目大版内专家分月排行榜第二2003年6月 专题开发/技术/项目大版内专家分月排行榜第二
2005年7月 专题开发/技术/项目大版内专家分月排行榜第三2004年11月 专题开发/技术/项目大版内专家分月排行榜第三2003年4月 专题开发/技术/项目大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。揭秘VR游戏开发:与传统3D差距仅10% 低延迟是核心
腾讯游戏逍遥剑客
[摘要]随着PS VR消费者版售价的最终公布,三大头戴显示器完成了它们的亮相。本文的作者从15年初开始进行VR游戏的预研工作,经过近一年的VR游戏经开发经历,总结出10条经验,希望对从业者们起到帮助。背景介绍北京时间3月16日,索尼在GDC 2016上公布了其虚拟现实头盔——PS VR消费者版的售价:399美元(约合人民币2600元)。同时,著名《》开发商Crytek发布了新一代游戏开发引擎(也是虚拟现实内容制作引擎)CryEngine V,并原生支持虚拟现实设备。而在此之前,Oculus、HTC也都先后召开过发布会,推出了自家的VR设备(Oculus和HTC VIVE)。三大头戴显示器的相继亮相,游戏开发引擎的发布……让虚拟现实成为了2016年最大的风口。作为游戏行业的从业者,许多人从两三年前Oculus初亮相之际便一路跟随。本文的作者便是其中一员。笔者所在的团队自2015年上半年便结合之前制作Xbox One体感游戏所积累的体感交互经验,开始进行VR游戏的预研工作。在这近一年的时间里, 一方面从外界感受到了一股虚拟现实快速发展的潮流,另一方面也体会到身边很多人对VR游戏的了解非常有限。现在我们自己的VR游戏Demo已经完结, 技术上验证了在当前的硬件条件下,开发高画质游戏的可行性。当然,优质的VR游戏需要大家共同的努力, 我们也希望更多的人参与进来。在此把我们在开发过程中学习到的, 体会到的,以及所期望的进行一下总结,希望对大家有所帮助。VR硬件原理及现状----------------------------------------------------------------------------狭义上的”VR硬件”,特指具有沉浸感的头戴显示器。它有三个基本特征:全3D的立体显示:附合人眼观看现实物体的习惯,能够”以假乱真”完全虚拟的画面:需要屏蔽外界光线的干扰,你所看到的都不是现实的东西。有些人可能觉得”增强现实(AR)”更高大上一些,但是对于游戏,我认为还是更倾向于VR。玄幻,魔幻,科幻,一切皆为虚幻。不受限制的视角方向:视角方向跟随头部转动和移动,不同于之前的头戴式显示器,视野非常广。当然,仅仅是这样的体验,并不能说是完美的”虚拟现实”,这也是很多人说硬件不成熟的理由。但是,在保证体验良好的的情况,目前的硬件已经满足做出高品质游戏的条件。下面对当前的硬件做一些技术分析:VR显示的基本原理首先,我们来一下满足上面提到的三个基本条件的最廉价产品,Google的Cardboard:插入手机做为显示屏幕,通过分屏的方式处理双眼的画面,达成立体画面显示借助纸壳屏蔽外界光线干扰,通过透镜就可以观看到手机渲染的虚拟画面依赖手机内置的陀螺仪,可以模拟出头部转向时视角的变化。另外,凸透镜在一定程度上增加了FOV(FieldOfView,视场角)Cardboad以低廉的价格,让很多人提前感受到了VR的魅力,并衍生出了很多塑料壳的版本。不过从体验上来说,Cardboard并不能算是一个合格的VR硬件,很多人在试玩过后,就自然而然地以为”VR就是那么回事”,“目前硬件还差得远”,“也就新鲜几分钟”等等,从一定程度上误导了很多人对VR的认知。那Cardboard存在哪些问题呢?严重的画面延迟:手机陀螺仪模拟的转向精度和响应速度都不满足VR的要求,造成渲染的画面跟不上转头的速度,加重了晕动症糟糕的画面表现:手机性能不足以支撑高画质高帧率的3D画面渲染,只能呈现出一些简单的卡通风格画面,达不到”以假乱真”的程度,影响了沉浸感缺乏自然的交互:由于手机的限制,目前没有配套的头部和手部的定位方案,从交互上很难做到让人满意的程度,只能依赖蓝牙手柄这样的传统输入设备当然,还有一些其它的小问题,比如手机发热,起雾,过重,画面变形等等,这些虽然不是影响体验的主要因素,但在使用上也是挺烦人的。接下来我们看看Oculus针对这些问题是怎么解决的,或许这也能解释两者之间的价格差异为什么这么大。不受限制的视野如果需要达到逼真的视觉体验,视野必需尽量接近真实。这需要满足两个条件:一是接近人眼的FOV,二是跟随头部运动的视角。上图左很直观地说明了人眼的FOV特点:双眼的覆盖范围是不同的,两只眼睛加起来可以超过180度。当然,在平面的液晶屏上很难做到这种效果,所以目前的主流VR硬件(不包括Cardboard)大多是用凸透镜做到了100~110度左右的FOV,虽然没有达到自然视野的程度,但相对于传统FPS游戏(FOV50~60度)来说,是个巨大的进步,直接影响到UI设计,交互,性能,场景设计,镜头等方面。为了解决近距离通过透镜观看画面的变形问题,我们需要对画面进行反向的变形校正:然而,在很多Cardboard游戏上,正常双视口渲染的画面,经过BarrelDistortion变形这一步是省略掉了的。FOV越大,光线的折射率也就越大,光线的散射现象也就越明显,给人的感觉就是画面的像素出现了重影。所以,变形后还需要对色散问题进行校正,即ChromaticAberration,这样通过透镜观看时才不会出现色彩分离的奇怪现象。空间定位能力头部的运动追踪,Oculus增加了一个外置的红外摄像头用于头显的空间定位,它同时也可以用于双手控制器(OculusTouch)的定位。当然,这种定位方式也存在FOV的问题,只适合桌前的小范围运动。对于大范围的移动,HTCVive的Lighthouse技术更有优势,可以在5x5m的范围内自由移动:空间定位技术的引入,直接改变了游戏的操作方式,从”指令式”操作逐渐变成类似”体感”操作的自然交互体验,UI也就不再拘泥于2D,开始向3DUI转变。主流VR硬件参数这里有一张表格,可以大体上说明2016年的主流VR硬件的参数(DK2和GearVR是很多人都体验过的,做为对比也加进来):硬件分辨率刷新率FOV特定控制器平台Oculus DK2 (Pentile)75100—-PCOculus Rift90100Oculus TouchPC OculusHTC Vive (SteamVR)90110SteamVR ControllerPC SteamSONY PSVR (RGB)60/120100PS MovePS4Gear VR6096Touch PadAndroid Oculus从中表格中提供的数据,结合一些现场体验可以分析出一些关键信息:三家VR设备的FPS和FOV差异并不大,这方面在体验上差距很小。PSVR的120FPS是60帧插值出来的,并不是实际的渲染帧数三家VR的控制器都趋于一致:双持手柄,有空间定位能力,可以模拟双手操作。这就为我们进行VR游戏的交互设计提供了很好的指引,引擎层面可以进行统一抽象,不用再为每个设备单独设计分辨率相对于DK2都有改善,但受限于OLED屏幕技术和硬件性能限制,还达不到视网膜屏的程度,像素点肉眼仍然可见,但已经不会影响游戏画面的观看PSVR由于受限于PS4的机能限制,无法在分辨率上占有优势,但是可以通过像素排列和镜片技术减少纱门效应(ScreenDoorEffect),即像素间空隙(OculusDK2上非常明显)每家的硬件都会依赖一个内容发行平台,与主机游戏的运作思路很像,这也决定了VR游戏的设计思路另外值得关注的是GearVR,算是最早商业化的平台硬件,提供了比Cardboard更好的体验,但同样受到机能的限制。预测手机VR方案几年后会推动VR设备的普及,毕竟手机是人人都有,买个配件的成本还是可以被很多人接受的。Motion-To-Photon延迟有一个参数是表中没有的,那就是延迟。我们先来给出定义:从用户开始运动到看到屏幕上产生相应变化所需的时间:从上图可以看到,从传感器采集,经过线缆传输,游戏引擎处理,驱动硬件渲染画面,液晶像素颜色切换,到人眼看到对应的画面,中间经过的每一个步骤都会产生延迟。要想达到理想的状况,需要硬件和软件优化的紧密配合。目前公认的可以被多数人接受的VR延迟是20ms,很多VR硬件只是传感器和液晶屏的时间就已经超出范围了。对于VR硬件来说,低延迟才是核心竞争力。但目前延迟缺少一个测试和评估标准,所以很难通过公开的数据评估每个设备的体验效果。如果以20ms为一个临界值,可以说其它品牌的VR设备大部分都不合格。VR体验目前的主要问题----------------------------------------------------------------------------VR游戏在当前的硬件条件下,仍然存在一些问题。我们做为开发者,必须搞清楚每个问题产生的原因,能够解决的解决,不能解决的回避,在此基础上才能做出良好的体验。晕动症“晕”可能是第一次体验VR的多数人最直接的感受,就像晕车晕船般的感觉。很多人可能只是因为这个原因就会放弃对VR游戏的期待,掉入”VR目前不成熟”的圈子里。那为什么VR游戏那么容易晕?1。你没动,画面动了:VR游戏体验者通常身体是静止不动的,如果游戏中看到的是各种加速/旋转/震动等,正常人都会受不了,跟晕车晕船的原理是一样的2。你动了,画面没跟上:这就是上文提到的延迟,很多时候,硬件附合要求了,游戏却帧数不够,同样也会造成严重的延迟现象。3。体质原因:比如有人有恐高症,放到一个悬崖边的虚拟场景里,也会触发心理和身体的反应。原因1可以从游戏设计上进行回避,但是目前来说很多需要跑步和跳跃的游戏受限比较大。原因2的话,主流硬件在延迟上都是满足要求的,做为开发者更多的是需要做好性能优化。原因3,从我们组的几个人感受来看,随着体验次数的增加,症状会越来越轻,这表明人的身体是可以适应的。而且,适当地增加一些让身体有所反应的游戏场景,也不失为一种乐趣。缺乏好的交互方式VR头戴显示器看以看作是一个显示输出设备,那对于游戏来说,还有另外一种重要的硬件:输入设备。在VR游戏中,键鼠的操作方式首先就可以放弃了,因为看不到,只能盲操作。游戏手柄的话算是一种折衷方式,但并不能发挥出VR的潜力。理想的输入设备其实是双手,这也是最自然的方式。遗憾的是,不管是Kinect,还是LeapMotion,都无法完美地支持双手交互的精度。所以,目前主流的VR控制器还是以双持手柄为主,预计要2016下半年才开始上市。在拿到OculusTouch之前,我们尝试了基于Kinect体感的VR交互方式,虽然并不完美,但已经能够看出未来的交互设计雏形了。GPU性能不足BarrelDistortion变形后带来一个问题:中心区域像素分辨率的损失,也就是说中心区域的像素被放大了,边缘区域的像素被压缩了。但是人眼对于视野中心的像素清晰度非常敏感,为了保证清晰度,需要把原始渲染分辨率提高,以保证变形后的画面能够达到液晶屏的像素密度。以OculusRift为例,屏幕分辨率为,渲染分辨率需要长宽各提高到140%,即,再加上90FPS的帧率要求,每秒需要渲染的像素达到了4。5亿个,相当于当代主机(XboxOne,PS4)游戏的7倍,与4k分辨率游戏所需要的硬件差不多。为了保证体验,他们规定了一个最低配置,叫做OculusReady的标准:CPUi54590,内存8G,显卡GTX970。虽然PS4的渲染性能远远达不到GTX970的程度,但是相对于PC来说,它可以提供一致的体验,这对VR来说非常重要。毕竟就算你的游戏画面再好,如果一玩就晕得想吐,那也不会是一个好游戏。不过好在离VR普及还有一段时间,足够让OculusReady的PC成为大众配置了。佩戴舒适度很多近视玩家会担心不能使用,其实主流的显示设备都可以戴眼镜观看。至于戴着舒不舒服,那需要在工业设计上进行迭代优化。就目前来看,SONY家的头显最舒服,Oculus家的手柄最舒服,HTC家的功能最强。除了平台独占的VR游戏,多数会同时兼容三家的设备,所以从体验上来说,差别不会太大。VR游戏与传统3D游戏的开发差异----------------------------------------------------------------------------VR游戏在开发制作上的差异,远远没有很多人想象的那么大,更多的是设计上的思路转变。所以,想要开发VR游戏,前提是能够开发一个3D游戏,核心还是游戏本身,VR只是体验上的增强。如果要写一个”VR游戏开发教程”,那么其中90%的东西,与VR并没有直接关系。但是,这10%的差异,却是VR的核心竞争力,因为它可以带给你”前所未有”的体验,为我们进行游戏玩法创新提供了非常大的发挥空间。玩法与主机游戏类似,注重核心体验,即Camera,Control,Character。可能很多人会觉得VR游戏只适合做FPS,其实并不是这样。只要保证沉浸感良好,什么类型的都可以做,RTS,MOBA,AVG,MMOG等等都可以。需要关注的核心点是Camera和Control,这直接关系到玩起来晕不晕,能够玩多长时间。只有保证操作体验和沉浸感过关,游戏的玩法才有意义。当然,VR给我们也提供了一些新的特性,可以用于玩法设计中:由于头部运动追踪的存在,点头和摇头的操作是可以被识别的,这就意味着很多Yes/No的操作可以直接通过头显输入。头部的朝向可以灵活变化,当你”盯”着某个物体看时,可以针对这个行为做出相应指令,具体可以参考GearVR上的Land’sEnd。由于360度视角方向不受限制,我们可以在背后做一些场景改变,让每次转头看到的场景都不一样,既能做成惊喜,也能做成惊吓。头部不仅仅可以转动,还可以配合身体小范围移动,比如SummerLesson中凑近NPC,NPC会害羞…Vive的一个上帝视角Demo可以蹲下看到地底下打地道的小兵。VR渲染可以调整WorldScale,即世界单位缩放,相当于动态调整自身相对于场景的比例,既可以做成巨人的视角,也能做成蚁人的视角。因为VR世界中的单位可以与现实不一样,那么一些类似”缩地术”的功能也变成现实,通过身体小范围的移动,达到虚拟世界中的大范围移动效果。双手控制器的存在可以模拟一些抓,扔,摸,打等的操作,捡起一个道具上下左右仔细看也是很有意思的一件事,可以把迷题设计在道具的隐藏角落里。VR中有了双手的存在,很多解迷就不再是简单的按一个键,各种零件组合,机械,绘画等对于双手控制器来说都是很棒的操作体验。控制器的握持感,非常接近于游戏中的手持武器,比如枪械,比如刀剑,这比握着一个鼠标或者手柄的感觉强多了。得益于高精度的传感器,做出具有竞技性的操作玩法也不是不可能。双手具有天然的空间感,一些建造类的玩法也非常适合,比如MineCraft,比如Besiege等,UE4甚至尝试了。由于3D音效的加强(下面会提到),“听音辨位”就可以做得更真实,各种潜入类玩法非常适合。另外,由于沉浸感的增强,恐怖游戏和XX游戏带给人的感官刺激会放大,这就不用展开了,试过就知道。图形如果以OculusReady的硬件标准,基本上可以预期的画面表现力差不多相当于上代主机的画面,即Xbox360和PS3后期的水平。我们试做的VR游戏Demo,在项目启动时的规格比较高,GTX970+OculusDK2的硬件下,经过优化可以流畅运行,下面是最终版的技术选型,给大家做参考:PhysicallyBasedMaterial:物理光照材质算是主流技术了,但是相应的性能开销也会大一些SphereReflectionCapture:反射效果和各种高光材质就靠Cubemap了BakedStaticLighting+BakedAmbientOcclusion:即能用静态光照就用静态的GlobalDynamicShadowMaps:仅仅是主角和大件遮挡物InstancedStaticMesh:对于性能的提升非常明显,大量的优化是基于Instanced技术Bloom+ColorGrading:多数的后期镜头效果在VR中并不适用,因为是通过双眼直接观看,并不像传统游戏那样通过”摄像机镜头”观看。而且,为了性能,能关的都关了…FXAA:理论上来说TemporalAA更适合消除远处的SpecularAliasing,但是会导致近处HUD的文字和纹路受到影响,解决之前先用FXAA代替。当然,如果具有足够的优化功力和场景设计技巧,也不排除GTX970+OculusRift流畅运行的可能,但这并不适合多数的团队。美术制作方面,有些资料会说NormalMapping和BillboardParticle不再适合VR渲染,其实并不是这样的。这些效果只是在近距离观看时才会发现很假,远处随便用,不用担心在制作上与传统3D游戏的差异。近距离的话,只能使用ParallaxMapping和MeshParticle之类保证不穿帮,但是极少数情况需要这样,跟场景和特效设计有关系。总体上来说,美术的制作与传统3D游戏差异并不大,除了UI。图片来自EIPC的ShowdownDemo交互由于目前主流的VR操作设备已经趋于统一,大家都有这么几个特征:可以模拟双手的空间位置和旋转通过手柄上的按钮触发指令型操作,如抓住,发射等仍然保留传统的”摇杆”,但比较少用到这里有一个OculusToyboxDemo的演示视频,能够很好地说明VR下的人机交互是什么样子的:图片来自Oculus的ToyboxDemo视频演示:可以预见到,基于双手的物理交互会越来越多,也就意味着物理模拟在VR游戏中的应用会更普遍一些。同样的,UI的设计已经不再推荐2D平面化,更加倾向于3D的效果,如科幻风格的全息投影,或者使用实体模型。或许,以后VR游戏中的”UI”改由3D美术来制作了。图片来自网络音效传统的3D游戏音效,一般是通过音量变化判断距离远近,通过频率变化判断相对移动。以空间定位为例:左右:通过左右声道的音量差异区分前后:通过多声道的卫星音箱或多声道耳机区分(不适大多数人)距离:通过音量的衰减判断高低:冒似没什么好办法…在VR中立体声耳机是可以随着头部转动的,这就意味着,我们可以通过两个声道配合转头来判定上下左右前后图片来自OculusConnect_Introduction_to_Audio_in_VR.pdf同样的,头部除了转动之外,还可以小范围移动,不用通过走动就能判定声音的远近。以前相当于背景音的环境音效,现在也能分辨出大概的方位图片来自OculusConnect_Introduction_to_Audio_in_VR.pdf因此,在VR游戏中,3D音效会被越来越多的人重视起来,甚至发展出新的玩法,比如Pastoral这个游戏。有兴趣的同学建议搜一下这篇文章: VR中的声音听起来体验如何?和传统音频有什么区别 想听一下效果的,,可以看一下这个Demo: VR游戏后续发展期望----------------------------------------------------------------------------主机平台现在有一类游戏,以高画质剧情体验为主,操作非常简单,俗称”游戏电影化”。目前VR圈也有很大一部分人在尝试VR电影的制作,但是基于360度视频的拍摄手法在VR的沉浸感并不是很好,而且传统的电影拍摄手法也不适合VR视频制作。所以,电脑制作的3D动画类电影在VR化方面具有先天优势,再结合VR头显的一些输入特性,甚至会产生”电影游戏化”的产品。另一方面,以UE4为代表的游戏引擎,实时渲染的画面效果已经达到了CG级别,在技术上具备了制作实时渲染电影的能力。可以预见到,未来的VR互动电影与VR游戏,它们之间的边界会变得十分模糊。EPIC’sInfi()ltratorTechDemo下面这个是国外的VRTHE VOID,相信不久的将来,这种体验可以像电影院一样普及。
正在加载...
随着技术的进步和成本的下降,VR和AR会跟智能手机一样进入我们生活的方方面面。对于VR游戏来说,很多人也跟我有一样的梦想,希望在有生之年,可以把它变成现实:图片来自SwordArtOnline
正文已结束,您可以按alt+4进行评论
相关搜索:
[责任编辑:aniszhou]
热门搜索:
Copyright & 1998 - 2017 Tencent. All Rights Reserved程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之2D游戏开发制作原理(二十一)
Unity3D研究院之2D游戏开发制作原理(二十一)
围观77920次
编辑日期: 字体:
经过了4个月不懈的努力,我和图灵教育合作的这本3D游戏开发书预计下个月就要出版了。这里MOMO先打一下广告,图灵的出版社编辑成员都非常给力,尤其是编辑小花为这本书付出了很大的努力,还有杨海玲老师,不然我也无法完成这本书的编写。等这本书出版了大家记得买喔,哇咔咔~ 下面,这篇文章是MOMO 3D游戏开发书籍中的一小段章节的修改版本,本篇文章我们将探讨一下Unity3D中如何来制作2D游戏。目前市面上已经有非常成熟的2D游戏引擎,比如cocos2d 或cocos2d-x等,并且都是免费的开发者可以直接用来制作2D游戏。然而使用3D引擎来制作2D游戏会让游戏画面更加附有立体感,因为2D游戏中Z轴永远是0,而3D游戏中Z轴是可变化的。
接着说说在Unity3D中制作2D游戏的原理。在Unity3D中绘制贴图的方式大致可分为两种,第一种是在GUI中绘制贴图,第二种是在网格面上绘制贴图。先说说第一种,GUI主要用来制作简单的游戏2D界面,比如游戏主界面中绘制的“游戏名称”、“开始游戏”、“保存游戏”、“退出游戏”一些按钮或界面中一切其它的高级控件,文本框,输入框等等、GUI只能制作简单的图形化界面,因为它的渲染效率非常低,它与3D世界中网格模型的渲染机制完全不一样。第二种的属于将图片绘制在3D中网格平面中,它的渲染效率远远高于GUI中,在制作2D游戏时都是将所有贴图绘制在平面模型对象之上,最后用摄像机以90度垂直的角度照射这这些平面。
下面我们开始学习在Unity3D中制作2D游戏的原理。2D游戏又可以分为两种,区别是物体碰撞时带物理引擎或不带物理引擎。带物理引擎就好比《奋斗的小鸟》一样,大家应该都玩过,小鸟发射后下落击落其它物体将发生物理的碰撞。(我没有细看这款游戏,但是我知道2D 与3D引擎都都可制作),不带物理引擎的就好比《捕鱼达人》这种游戏,游戏中碰撞都是由代码自己来完成的,经典的2D碰撞监测包括:矩形与矩形的碰撞、点与矩形的碰撞、圆与圆的碰撞等。今天这篇文章我们主要讨论第二种不带物理引擎的2D游戏。
如下图所示,我们盘点一下2D游戏中必备的几个元素。
摄像机:无论是3D游戏还是2D游戏摄像机都是非常重要的属性,移动摄像机即可更改屏幕中显示的内容,游戏地图的坐标永远都不会发生改变。
地图:2D游戏中的地图一般是由tile拼接而成,它可由地图编辑器生成然后将每一块tile绘制在整个贴图中,最后将贴图贴在平面网格面之上即可。还有一种作法是将两个或两个以上屏幕大小平面以队列的形式排在屏幕后面,当摄像机移动超出第一块面显示范围时,将它的坐标移动在第二块面后面,此时地图就形成了一个排序的队列。为了让地图的效果更加完美,一般地图可以由好几层来组成,比如背景层、与主角的遮挡曾、物理层等等。
地图拼接:地图的排序队列中两张图应当是可以无缝拼接,这个应当是由美术来提供资源,这里我就不那么细致了将远离说明白即可。
主角:它的范围就比较广的,敌人、物品等等出现在地图之上的都可以使用它。如果控制主角移动,摄像机移动的同时主角也当跟随移动,并且保持屏幕中的移动比例,除非摄像机无法移动,这时将直接移动主角在屏幕中的坐标。 说的有点绕了呵呵,大家仔细想想哈哈。。
然而上面的一切面是由Plane面来完成。
再Unity层次视图中选择摄像机对象,右侧监测面板视图中我们看看摄像机组件的一些属性,如下图所示。需要注意的就是Projection 投影类型。
首先我们应当修改摄像机的属性,默认摄像机投影的类型是Perspective,它保持摄像机以扩散的的形式照射着不利于2D平面的展示。这里我们应当选择Orthographic,这样摄像机将直直的照射在显示的区域。
Perspective类型
Orthographic
从侧面观察摄像机,通过这两张图我相信大家应当能看懂为什么2D游戏要用Orthographic了吧,摄像机的投影类型是可以在代码中动态的修改的。
//得到游戏中摄像机对象
Camera camera = Camera.mainCamera;
//设置摄像机投影类型OrthoGraphic
camera.isOrthoGraphic = true;
//设置摄像机投影类型Perspective
camera.isOrthoGraphic = false;
在代码中取得摄像机投影的区域大小,它也可以动态的修改,这样就可是实现摄像机拉近与拉远的效果。根据投影区域的大小配合着整个地图的宽高来写判断条件,避免移动摄像机时超过地图的范围。
Camera camera = Camera.mainCamera;
Debug.Log(camera.orthographicSize);
接着我们使用代码来得到地图面的宽高,这段代码写的就比较精细,因为网格面是可以缩放的,首先得到网格面的宽与高,然后分别乘以缩放系数就可以得到真实面的宽与高,然而Unity中的坐标是以“米”为单位。下面代码中用到了中文,如果要想在编辑器中显示中文C#语言需要修改编码格式为UTF-16。JavaScript修改编码格式UTF-8或UTF-16即可。
1234567891011121314151617181920212223242526272829
using UnityEngine;using System.Collections;&public class Test : MonoBehaviour {& void Start ()
{& &&&&GameObject plane = GameObject.Find("Plane0");
//得到面默认宽度
float size_x = plane.GetComponent&MeshFilter&().mesh.bounds.size.x;
//得到面宽度的缩放比例
float scal_x = plane.transform.localScale.x;
//得到面默认高度
float size_z = plane.GetComponent&MeshFilter&().mesh.bounds.size.z;
//得到面高度缩放比例
float scal_z = plane.transform.localScale.z;&
//原始宽度乘以缩放比例计算出真实宽度
float mapWidth = size_x * scal_x;
float mapHeight = size_z * scal_z;&
Debug.Log("得到面的位置:"+plane.transform.position);
Debug.Log("得到面的宽度:"+ mapWidth);
Debug.Log("得到面的高度:"+ mapHeight); }&}
有了摄像机照射的区域以及背景地图的宽高尺寸那么就可以在代码中编写逻辑判断条件啦。下面我们来使用简单的代码控制摄像机移动以及主角移动。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
using UnityEngine;using System.Collections;&public class Controller : MonoBehaviour {& //动画数组 private Object[] anim; //主角对象 private GameObject hero; //限制一秒多少帧 private float fps = 10; //帧序列 private int nowFram; //记录当前时间 private float time;& void Start () {
//得到资源名称为down文件夹中的所有对象资源
anim = Resources.LoadAll("down");
//得到主角的对象
hero = GameObject.Find("hero");
}& void FixedUpdate ()
//上、下、左、右平移摄像机
if (Input.GetKey (KeyCode.A))
transform.Translate(-0.01f,0,0);&&&
if(Input.GetKey (KeyCode.D))
transform.Translate(0.01f,0,0);&&
if (Input.GetKey (KeyCode.W))
transform.Translate(0,0.01f,0);&&
if(Input.GetKey (KeyCode.S))
transform.Translate(0,-0.01f,0);&&
//上、下、左、右平移主角 &&&&if (Input.GetKey (KeyCode.J))
&&&&hero.transform.Translate(0.001f,0,0);&&
if(Input.GetKey (KeyCode.L))
&&&&hero.transform.Translate(-0.001f,0,0);&&
if (Input.GetKey (KeyCode.I))
hero.transform.Translate(0,0,-0.001f);&&
if(Input.GetKey (KeyCode.K))
hero.transform.Translate(0,0,0.001f);&&&&
DrawAnimation(anim); }& void&&DrawAnimation(Object[] tex) {&
//计算限制帧的时间
time += Time.deltaTime;
//超过限制帧切换贴图
if(time &= 1.0 / fps){
//帧序列切换&&&&&&
nowFram++;
//限制帧清空&&&&&&
//超过帧动画总数从第0帧开始&&&&&&
if(nowFram &= tex.Length)&&&&&&
nowFram = 0;&&&&&&
}&&&&&&&&}
//将对应的贴图赋予主角对象,强制将资源文件转换成贴图&&&&&&&&hero.renderer.material.mainTexture = (Texture)tex[nowFram];
代码中我们使用 Resources.LoadAll(“down”);来加载主角动画资源,这里将主角一组4帧的行走动画放在项目资源视图中 Resources文件夹中的down文件夹内。值得注意的是,使用Resources来加载资源就必须将资源放在Resources文件夹中,否则提示无法找到喔。在书中我以将人物四宫格行走动画加入在其中,因为这里只是一个是示例,所以我只加载了向下行走的4帧动画。我们看看资源在项目资源视图中的保存结构。
还有一个比较重要的地方就是要修改材质的shder类型,因为默认的材质是Diffuse,它是不支持透明的。如果材质不支持透明。主角的背景将会是白色。如下图所示,这里选择Transparent/Diffuse。保存为Transparent家族中的材质都是支持透明的。
最后2D游戏效果图映入我们眼帘了哦。按键W、S、A、D控制摄像机移动,按键J、K、I、L、控制主角移动。
总结一下这篇文章,本文我们在多个Plane对象身上贴上材质资源,再让摄像机直直的照射着它。实现2D游戏的基本原理,本文没有涉及到Unity3D的物理引擎,不要紧在下章中我将向大家介绍一下Unity3D中的刚体组件与角色控制器组件如何来实现模型的物理效果,包括物理引擎与3D或2D游戏的结合。另外大家一定要期待我的新书喔,哇咔咔~嘿嘿。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!
Pingback 引用通告:

我要回帖

更多关于 游戏开发 的文章

 

随机推荐