查看: 2847|回复: 0
打印 上一主题 下一主题

使用 Unity 3D 制作 2D 游戏的重点做法

[复制链接]

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2012-11-2 16:18:28 |只看该作者 |倒序浏览


Unity 的官网上有提供一个 2D 游戏的教学范例,这个游戏只不过把镜头摆放在横向位置跟随角色移动,游戏内对象运动时固定一个轴不动,使他像横轴式的2D游戏来玩,本质上其实还是个3D游戏,所以如果没有 3D 建模的话不就没办法做 2D 游戏了?其实这些并没有定论,就看制作者如何运用 Unity 来完成自己的游戏。



首先我们先来说为何用 Unity 来做 2D 游戏,除了 3D 与 2D 游戏各有其乐趣之外,最主要的还是 Unity 方便使用的渲染及物理引擎,如果是像官方范例那样使用 3D 建模来做,这些对象只需要做过一次,将来要转成3D游戏的玩法,也不需要重新建模,重复利用性高,对将来节约开发成本很有帮助,如果不使用 3D 建模的方式而改以平面贴图的对象来做 2D 游戏,对于各种物理现象如碰撞、重力、加速度等,也可以直接使用 Unity 的 Component 来完成,而且游戏空间本身就是个 3D 空间,所以要制作出拥有多层次场景的 2D 游戏也会变得较为方便,试想自己写程序来做 2D 游戏,光是碰撞、重力这种物理动作就够伤脑筋了,再加上光影效果等变化,势必要多加很多更细部的贴图,而不如 Unity 加个灯光或什么的,由 3D 渲染及物理引擎自行去运作即可。



使用 3D 建模的方式制作 2D 游戏,直接看官网范例即可,其实和做 3D 游戏没啥差别,如果使用平面贴图对象来做的话,只需要注意到几个重点就可以很容易完成。



首先,就是如何贴图呢?也许直觉会想到使用 GUI 来贴图,但别忘了 GUI 是处在画面的表面空间,是纯 2D 的空间,一方面会受到画面宽高分辨率的影响,一方面是无法套用 3D 物理引擎的东西,而且 GUI Class 只能使用于 OnGUI() 中,根据我的使用经验,OnGUI() 在每 frame 会执行数次,如果贴图的图档设定不够优化的话,在较好的硬件可能不受影响,但在 iPhone 3G 或 iPod Touch 等较旧机型硬件上,如此大量 GUI 贴图及运算将影响到执行效能,降低整个游戏的顺畅度,所以应该避免利用 GUI 贴图来制作 2D 游戏内容,当然也可能利用一些程序设计技巧来达到使用 GUI 制作 2D 游戏的目的,但这并不是这边想要说明的方式,而且我并不建议那样做^^,GUI 还是用在静态的讯息表现上就好了;既然不建议利用 GUI 制作,那么如何贴图呢?大家应该都知道使用 Unity 选单建立平面对象 GameObject > Create Object > Plane ,这个平面有 200 个面,对我们来讲并不需要那么多,所以可以自行使用 3D 建模软件自己拉个只有 2 面的平面来汇入 Unity 使用,建好平面对象后,在 Project 窗口中建立材质球并拉给已建立的平面对象即完成贴图了,当然在这个材质球未有任何 Texture 的情况下是看不到任何贴图的,此时只需要将欲贴图的图片文件拉给材质球就行了,材质球预设的 Shader 是 Diffuse ,会使贴图贴满整个四方形的平面,这样贴图的运用就不灵活了,通常我们会使用许多去背图,此时只需要将 Shader 改为 Transparent 系列的 Shader 就可以达到去背的效果(通常没特殊需求,我是使用 Transparent > Diffuse),如此贴图的部份就完成了。







使用 Unity 选单建立平面对象      







建立材质球







材质球未有任何 Texture 的情况







材质球预设的 Shader 是 Diffuse





Shader 改为 Transparent 系列





Shader 是 Diffuse





Shader 改为 Transparent > Diffuse



此时在镜头前,此平面对象看起来就像是一般 2D 画面的贴图而已,但 Scene 窗口中可以很明显的看出它是 3D 空间中的对象,你可以任意的为其加入其他 Component 或自己写的 Script 来做控制,此时就可以为其加入刚体及碰撞体,那么许多物理动作就能简单又快速的完成了;此时会发生一些问题是在碰撞时可能会使平面转动或是碰撞结果产生错误方向的位移,毕竟 2D 游戏只有 X 轴和 Y 轴,碰撞后多了 Z 轴的位移不就把画面破坏掉了,以往我们可能需要利用 Update() 或 FixedUpdate() 不断的将平面的角度及位置调整回来,如今的 Unity 版本(3.3)则可以直接在刚体的 Component (Rigidbody) 上直接冻结某个轴的旋转及位移,使其在碰撞后不受影响;当然,这个冻结项目只在物理引擎运算下有作用,我们还是可以透过程序代码去操作已冻结的轴。







加入刚体及碰撞体







刚体可限制并冻结指定轴



接下来是镜头的设定,通常预设投射(Projection)方式是***(Perspective),这使画面有景深的立体感,有些 2D 游戏的背景或对象表现需要让远一点的东西较小,近一点的东西看起来较大,或是背景映出前景的影子等,那么直接使用预设的 Perspective 即可,但如果你希望制作的 2D 游戏是整个平面化的,希望场景内配置的对象不会因为其中一个较远或较近而影响到大小或呈现角度,此时就必须将 Projection 改为 Orthographic ,那么画面内的镜头可视范围将不会有任何远近感,达到完全平面的效果。





改变镜头的投射方式



基本上,有了以上三个重点,就能轻易的利用 Unity 3D 制作出 2D 游戏,其他的就看设计者如何利用 Unity 做更多灵活的变化啰~!!

例如善用 Material 的 Tiling 及 Offset 的数值变化,也能轻易的把静态贴图变为有趣的动态贴图(详见官网的 material class )。



前阵子在网络上看到 EZ GUI 也是利用类似的原理,并且制作了一个很方便的 GUI 制作工具,在 Unity 的 Asset Store 可以买得到的样子,有兴趣的人不妨玩看看。

另外,上个月 Asset Stone 上架的 RageSpline 似乎也是个不错的 2D 游戏制作工具,有需要的人可以买来用看看。


分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-20 09:01 , Processed in 0.064768 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部