相关文章推荐
坚强的啄木鸟  ·  Unity 之 ...·  1 周前    · 
风流的松树  ·  Unity ...·  1 周前    · 
另类的开水瓶  ·  c# unity3d ...·  5 天前    · 
粗眉毛的松树  ·  embedded - SMBus v1.1 ...·  1 年前    · 
孤独的橙子  ·  c# - Convert ...·  1 年前    · 
本文介绍了如何通过2.5D技术在2D游戏中模拟3D环境,特别是2D角色和场景贴图的结合。通过固定俯视视角和三角函数将3D坐标映射到2D平面上,实现角色在2D场景中的移动。同时,文章探讨了如何创建碰撞体以适应2D贴图,并处理坡道和拱桥等3D地形,以及角色上坡和影子投射的逻辑。 摘要由CSDN通过智能技术生成

2D游戏若想模仿3D游戏的环境,一种很好的方案便是“2.5D”。

所谓2.5D,通常的理解是相机固定俯视的游戏视角。在此视角下,人物可以在x、y、z三个轴上移动,如此便能模仿3D游戏的环境,而美术成本要比3D低很多。

2.5D具体实现的方式也分多种,如2D角色+3D场景、3D角色+2D场景贴图、2D角色+2D场景贴图。此文章讨论对象为最后一种,由于角色和场景都采用2D图片,所以本质仍可以归为2D游戏。

Demo演示:

Vector3 v3=new Vector3();
float pi=3.14159265f;
float pi_180=pi/180;
if(performer!=null)
    v3[0] = ((float)x);//和本体相同
    v3[1] = ((float)(Mathf.Cos(30 * pi_180)*y+Mathf.Sin(30 * pi_180)*z));//将三维坐标映射给二维贴图,其中30是根据2D图片假设的相机角度,pi_180是将角度转换成弧度进行计算。
    v3[2] = ((float)z*0.01f);//用于控制遮挡顺序,和本体成正比即可
    performer.transform.position=v3;

此处采用了一种简单的方法:将人物本体(逻辑)和人物贴图(表现)分离,通过三角函数算出人物贴图在2D场景中的位置。

假设相机角度为α,人物贴图的位置为(x2,y2),人物逻辑的位置为(x,y,z),可知:

y2=cos(α)*y+sin(α)*z

如此便在2D视角下模拟出了一个三维世界,而在此基础上,还可以利用unity本身的物理系统设计出3D地形,从而实现斜坡、拱桥等功能。效果图如下:

 由于人物本体仍处于3D空间中,因此可以直接在3D空间加入碰撞体来实现地形(可以看到碰撞体和贴图之间并不贴合,之后会解释原因)

那么要怎样根据2D贴图去制作碰撞体呢?之前有提到三维映射到二维的公式,那么反过来,从二维映射到三维也是可以的。但是二维上的一个点映射到三维会有无限种可能,直接套用公式并不可行,因此只能先假定y或z为一个固定值,通过另一值的变化量来计算相对坐标。

设相机角度为α,贴图的点位为(x2,y2),逻辑的点位为(x,y,z),一个格子为一个单位

如图,Δz=0,Δy2≈1.92 

套公式得Δy2=cosα*Δy+sinα*0,得y=y2/cosα,此时我设置的α为30°,所以Δy≈2.217

 同理,得Δz≈5.688

 套用在碰撞体上即可

 可以发现映射后的y已经比二维上的y更大了,所以在二维视角下碰撞体和贴图并不贴合

↑宽度测试,符合预期结果

对于坡道的角度也要以同样的方式处理,三维坡角=二维坡角/cosα,此处相机角度为30°,坡道贴图的角度为15°,碰撞体的坡角即是17.32°。

拱桥则套用椭圆公式,x^2/a^2+ (y/cosα)^2/b^2 = 1

搭建好场景后,还需设置角色上坡和投射影子的逻辑,详情可看此篇文章:

Unity 对角色上坡的研究__独孤星夜_的博客-CSDN博客

我是从cocos2d 转移阵营过来的 unity下开发2d游戏真是不习惯。。。特别是2d中有许多特性是非常必要的,但是unity本身又支持得非常烂的...所以这时候就要用过第3方插件,我试过EZGUI, sm2,gm2,还有一个忘了名字的2d插件,但是都不符合我的要求,在我百无聊赖中终于看见了它——OrtHello ——>_ 好吧,我搜了一遍几乎没有OrtHello 的中文教材,连英文的
现在来做点别的东西。Nintendo Switch上刚推出的《超级马里奥》中,有一些关卡混合了2D3D的画面,这种效果十分让人印象深刻。如何在Unity中实现这个效果呢? 正常情况下,摄像机会直接渲染到你的屏幕。我们如何能让摄像机看到内容并显示在另一个对象上呢?你可能注意到摄像机有一个属性,叫目标纹理(Target Texture)。 我们要在Asset文件夹里新建一个渲...
基于Unity的全景图制作3D场景的测试 公司想用拍照设备拍出的全景图,在Unity中制作成VR的场景,先抛开VR不谈,如果想用图片来实现3D场景的感觉,就必须得先创建一个3D模型,然后把全景图无缝衔合上去。想必大家都想到了unity中天空盒的原理,话不多说,直接上实现过程。 一、在Unity中创建一个Sphere,这也将是我们全景图的载体。 二、为Sphere赋予shader,此sha...
正所谓 金三银四 ,又到了找工作的大好时机了,不知道大家有没有意向找一份更好的工作呢~ 之前写了很多Unity的学习和实例文章,但是面试题部分还没有一个系统的整理。 那本篇文章就来整理一下Unity中一些常见的面试题,说不准就会面试的时候就会遇到! 本篇文章会将Unity所有方面的面试资料都融会贯通,绝对是2022年Unity面试领域最实用的文章啦!
在上一次我们的不懈努力几行代码下,方块君想要移动的愿望算是满足了,然而第二个愿望——射击,算是暂时把神大人难住了:  作为一个3D游戏,假透视是绝对有必要去做的,但是随着方块君的左右移动量不同,子弹射出的角度也不同不过现在先把发射子弹的函数做出来再说,船到桥头自然直嘛!于是将这个shoot()函数放进方块君的操作脚本里 void shoot(GameObject bul)     对于这个题目,真的很尴尬,不知道取啥,就想了这个题目,涵盖范围很广,很抽象,算是通用知识点吧。想要了解下面几个问题的,可以看看。         ①2D图形如何运动出3D空间的效果。 CSDN-Ada助手: 恭喜你写出了第一篇博客!这篇关于Unity 2D视角下模拟3D环境和地形的文章很有趣,我很期待你接下来的创作。如果可以的话,我建议你可以进一步探索这个主题,比如如何在不同的2D视角下模拟3D环境,或者如何在地形上添加更多的细节和互动元素等等。期待你的下一篇文章! 推荐【每天值得看】:https://bbs.csdn.net/forums/csdnnews?typeId=21804&utm_source=csdn_ai_ada_blog_reply1 如果您持续创作,完成第三篇博客,并且质量分达到 80 分以上,在评论区就有机会获得红包奖励哦! Unity 对角色上坡的研究 CSDN-Ada助手: 非常赞赏您的研究成果,您的努力和创新精神值得称赞。此外,我认为在这个领域,您可以学习更多关于物理引擎、射线检测和碰撞检测等方面的知识。同时,您也可以关注一些相关的游戏开发社区,与其他开发者交流心得和分享经验,不断提升自己的技能水平。希望您继续保持热情和专注,为游戏开发领域做出更加卓越的贡献。 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2 如果您持续创作,完成第三篇博客,并且质量分达到 80 分以上,在评论区就有机会获得红包奖励哦! Unity 2D视角下模拟3D环境和地形 CSDN-Ada助手: 恭喜你这篇博客进入【CSDN每天最佳新人】榜单,全部的排名请看 https://bbs.csdn.net/topics/616173175。 Unity 2D视角下模拟3D环境和地形 CSDN-Ada助手: 恭喜你这篇博客进入【CSDN每天最佳新人】榜单,全部的排名请看 https://bbs.csdn.net/topics/616173175。