最近在写的都与2.5D有关,随手记录一些好玩的东西。
2D还是3D?
2.5D是一个很奇妙的东西,对2.5D是非常难以下定义的,你不能说2.5D的逻辑是2D的,因为有很多使用这一视角的3D游戏,在这上面有很多需要使用Y轴的游戏,玩法上是2D无法实现的。但是你若说2.5D是3D的,但是又有很多伪3D游戏的视角是2.5D。这个定义争论起来其实很多时候没有什么意义,我个人更加倾向于将它看成一个视角就好了,在这个特殊的视角下,可以像纪念碑谷一样通过切换成正交相机来形成一些特殊的玩法,又或者像很多战棋,moba类游戏方便玩家观察到一个更全局的场景(而不像3D游戏一般被限制在身前的视角),也有像八方旅人那样使用透视相机使得2D场景也有了远近关系,视觉效果上好看了非常多。总而言之,2.5D相对于2D与3D相机各有优点。
在2D还是3D下实现?
在早期只有2D的游戏中,2.5D是通过特殊手段在2D的引擎上实现的特殊效果,在现在3D游戏早已走进千家万户的时代,也几乎很难找到一个只能实现2D的引擎类,在3D上做实现其实是更加舒服的,我个人归纳的大致理由如下:
-
2D需要做坐标和游戏内空间坐标的映射,而3D几乎只用旋转相机就能做到
-
对于美术来说,2D的地板UI都得去倾斜(其实转一下压一下也差不多),3D则不会有这个问题
-
2D上想实现2.5D的光影效果是很困难的,而3D则不会有这个问题
不过2D其实也不是不能做就是了。
关于2.5D相机角度
2.5D相机角度比较舒服的旋转角度是(35, 45, 0),y轴自由加减90度都可以,在这个旋转角度下看场景,如果相机设置为正交,则该角度下,一个旋转角度为(0, 0, 0)的方块看起来是几乎由3个完全一样的棱形组成的。
如果使用Unity中的Cinemachine,注意Follow是保持角度移动位置,LookAt是保持位置旋转角度,要保持旋转角度,我们需要在LookAt中留空。
在这个视角下我们就可以实现一些视错觉(记得使用Unity Scene视窗中的磁吸工具),例如:
我们可以通过获取物体在相机的位置并忽视深度使得它们能够形成可以通行的路径,这样也就有很多好玩的玩法,纪念碑谷以及许多跟它有相似之处的都有用到这种视错觉。
2.5D影子-简单的Shader Graph
实现2D sprite在3D场景下的影子,这里参考了油管博主Sonny Williams的教学视频,Shader Graph如下图所示:
简单的来说实现思路就是新建Lit Shader在右边的Graph Inspector窗口中勾选Alpha Clipping(根据透明度挖空形状),Threshold属性是alpha小于多少就把它挖空,否则保留。
对应shader新建完material后,更换对应Sprite中Sprite Renderer的material为我们新建的这个material,并且在右上角选择Debug模式将Cast Shadows设置为on
简略效果预览