使用Unity制作2.5D游戏(三)

哔哩哔哩   2023-05-14 14:52:17

第二节原文:https://notslot.com/tutorials/2019/12/25d-game-in-unity-part-2

为了修正图片不正确的遮挡问题,原作者修改了URP中的一个shader,同时放弃了透明度这个功能,若为了遮挡修正通过修改排序轴也能大体上做到,感兴趣的可以看看原文。


(资料图片)

本文原文:https://notslot.com/tutorials/2019/12/25d-game-in-unity-part-3

工程下载地址:https://github.com/notslot/tutorial-25d-game-unity

本节将使用Shader Graph制作一个shader,让3D物体更好地和2.5D场景融合。

左边是原本的物体,右边则是新的。

可以注意到右边的进行了更好的融合,左边则有些突兀。

单独的放置一个3D物体或许有些突兀,但在其周围合理排布2D图片时,也能更好的和整个游戏世界统一起来

为了更好的理解不同,我们看看shader做了什么。

基础版本

如果你的游戏对象是静态的,不需要动,那么这个就能快速解决。如果你需要更复杂的运动,我们后面也会讲述更合适的shader。

这部分我们尝试把3D模型用同样的角度(45°)来偏移。

侧视图如上所示。左边的线代表2D图片,右边的方块代表3D的cube。shader使其如图片一样做了45°偏移。

其原理就是把每个顶点的z值做偏移,偏移量为它的y值。

shadergraph如下图:

创建一个新材质球,命名:Simple3dSkew,然后赋值其MainTex属性,就可以给游戏物体使用了。

这时候我们的3d物体看起来,就匹配角度了。不过这时候你选择物体的时候,会发现选择框或碰撞体还是之前的形状。这是正常的,因为我们只改了渲染部分。回想第一节,这对我们也是有好处,因为我们的物体碰撞不需要旋转。

不过这个shader有一个问题,无论怎么旋转,物体都保持一个样。接下来,我们马上来处理这个问题。

高级版本

这回我们来解决旋转问题。上面的之所以不成功,是因为我们的偏移是在物体空间做的,如果我们使用世界空间,就可以了。

Shader Graph如下:

之所以减去原点的世界坐标,是因为如果物体的y值不为0,那么世界空间里,y值可能会异常大或小,减去原点的y值,可以获取一个固定的相对值,这样的偏移才是正确的。

或许你在移动物体或摄像机的时候发现了一点问题。这是因为渲染管线的批处理造成的。虽然我们可以关掉批处理,但最好是把材质球的Enable GPU Instancing选项打开。

下一节,我们将做一个2.5D游戏用到的开关门。

(部分内容做了删改,应该不影响阅读。可看原文。)

相关资讯
最新资讯