所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具
Unity3D超级马里奥小游戏源码:从零实现马里奥物理系统与隐藏关卡

Unity3D超级马里奥小游戏源码:从零实现马里奥物理系统与隐藏关卡

更新时间:13/06/2025
运行环境:Linux
源码类型:Unity3D小游戏
资源下载

Unity3D超级马里奥小游戏源码:从零实现马里奥物理系统与隐藏关卡 1

文章目录CloseOpen

一、从0搭场景:10分钟让蘑菇王国“站起来”

很多人卡在第一步:“场景怎么画?总不能一个个像素点拼吧?”其实Unity早给2D游戏准备了“懒人工具”,我那朋友第一次打开Unity时,连界面都看不懂,结果用Tilemap(瓦片地图)半小时就画好了第一关的地图。

先搞定素材:免费资源够你用

你肯定会问:“图片素材去哪找?我不会画画啊!”别担心,游戏圈早就有“共享精神”。我通常推荐两个地方:

  • itch.io:搜“Mario-like tileset”,能找到一堆免费的马里奥风格素材包,包含地面、砖块、金币、角色 sprite 图(就是会动的小人图片),甚至还有现成的动画帧
  • Unity Asset Store:搜“2D Platformer Kit”,Unity官方出过免费的2D平台游戏素材包,风格和马里奥很像,连碰撞体都给你做好了

记得让素材“适配”Unity。下载后导入项目时,选中所有图片,在Inspector面板把“Sprite Mode”改成“Multiple”(这样能把一张大图切成多个小图),再点“Sprite Editor”切片——不会切?用“Automatic”自动切片就行,Unity会帮你识别图片里的小元素。我朋友第一次切图时手忙脚乱,后来发现自动切片比手动快10倍,你可别犯傻。

用Tilemap画地图:像拼乐高一样简单

素材准备好了,怎么把它们变成能跑的关卡?Unity的Tilemap就是“电子画板”,步骤超简单:

  • 在Hierarchy面板右键“2D Object > Tilemap > Rectangular”,创建一个瓦片地图(就叫“Ground”吧,专门放地面)
  • 打开Project面板,找到你下载的地面瓦片图,把它们拖进Tile Palette(瓦片调色板)窗口——如果没这个窗口,在Window > 2D > Tile Palette打开
  • 现在你就有了“画笔”,选一个地面瓦片,在Scene视图里点一下,就能画出地面;选砖块瓦片,往上叠几层,就是马里奥能顶碎的砖块

这里有个新手必踩的坑:忘记加碰撞体。你画的地面看起来是实的,但马里奥会直接穿过去!解决办法很简单:给Tilemap加个“Tilemap Collider 2D”组件,再勾上“Used By Composite”,然后在Tilemap的父物体(Grid)上再加个“Composite Collider 2D”和“Rigidbody 2D”,刚体类型选“Static”(静态)。这样地面就变成“踩不穿”的实体了,我朋友当初卡了两天才发现少加了这个,你可别学他。

加细节:让场景“活”起来

光秃秃的地面不好看?加几层背景和前景就行。再创建两个Tilemap,一个叫“Background”(背景)放远处的山和云,一个叫“Foreground”(前景)放近处的草和水管,在Inspector面板调整它们的“Order in Layer”(图层顺序):背景设为-10,地面设为0,前景设为10——数字越大,显示越靠前。这样场景就有了层次感,看起来像真的蘑菇王国。

二、让马里奥动起来:3段核心代码搞定90%玩法

场景搭好了,该让主角“活”过来了。你可能会说“我不会写代码啊”,别怕,马里奥的核心逻辑代码加起来不到200行,而且我会把每句代码翻译成“人话”,你照着抄都行。

移动和跳跃:让马里奥听你指挥

先给马里奥加“身体”:新建一个2D精灵(Sprite),拖上马里奥的图片,然后加“Rigidbody 2D”(刚体,让角色受重力影响)和“Box Collider 2D”(碰撞体,让角色能碰到东西)。刚体设置很关键:重力缩放(Gravity Scale)设为3(跳起来不会飘),线性阻尼(Linear Damping)设为0.5(移动时有轻微减速,更自然),还要把“Freeze Rotation Z”勾上(防止角色歪头)。

然后写移动代码,新建C#脚本“PlayerController”,挂到马里奥身上。核心代码就这几句:现在蘑菇怪会左右走,碰到墙就掉头。如果想实现“马里奥踩蘑菇怪会死”,可以在PlayerController里加碰撞检测:碰到标签为“Enemy”的物体时,游戏结束。

你可能会问:“这些代码哪里来的?”其实Unity官方教程里有更详细的2D游戏开发指南(点这里看Unity官方2D入门教程),我只是把它简化成了马里奥专用版。跟着做,你会发现游戏开发真的没那么难。

对了,记得保存场景和项目,按Ctrl+S就行。现在运行游戏,你就能看到马里奥在你画的地图上跑、跳、吃金币了——是不是很有成就感?如果遇到问题,比如角色不动,先检查脚本有没有挂对;如果穿模,看看碰撞体有没有加上。

你要是跟着做了,欢迎在评论区告诉我你的马里奥小游戏做到哪一步了,或者遇到了什么问题,我看到会回你~


想让蘑菇怪不那么“傻”,会追着马里奥跑?其实加几行代码就行,一点都不难。你先得让蘑菇怪“看见”马里奥啊,就像人得先知道目标在哪才能追对吧?Unity里有个简单的办法,你给马里奥那个游戏对象打个“Player”标签——在Inspector面板最上面那个“Tag”下拉框里选“Player”,要是没有就点“Add Tag”自己建一个。然后在蘑菇怪的Enemy脚本里,用“GameObject.FindWithTag(“Player”)”这句话,就能找到马里奥了,就像你在人群里喊“穿红衣服的那个人”,目标一下子就定位到了。

找到马里奥之后,得算距离啊,总不能离着十万八千里蘑菇怪就开始追吧?你可以在脚本里加两行代码:先获取马里奥的位置(player.position)和蘑菇怪自己的位置(transform.position),然后用Vector2.Distance(player.position, transform.position)算两点之间的距离。假设你想让蘑菇怪在10米范围内才开始追,那就加个判断:如果这个距离小于10米,就进入“追击模式”;大于10米就继续左右巡逻。我之前帮朋友调这个的时候,他一开始把范围设成了5米,结果蘑菇怪反应太慢,马里奥都快踩到它了才开始动,后来改成10米就舒服多了——你可以根据自己关卡大小慢慢试,这个数值没有标准答案。

进入追击模式后怎么让它朝着马里奥跑呢?也简单,算个方向向量就行。用“player.position

  • transform.position”就能得到从蘑菇怪指向马里奥的方向,就像你从A点到B点,得知道往哪个方向走对吧?不过这个方向向量的长度会随着距离变化,远的时候长、近的时候短,直接用的话蘑菇怪跑起来速度就忽快忽慢了。这时候加个.normalized,就能把方向向量变成“单位向量”,长度固定为1,再乘以你设定的moveSpeed,蘑菇怪就会以稳定的速度朝着马里奥跑了,代码大概是“Vector2 direction = (player.position
  • transform.position).normalized; rb.velocity = direction moveSpeed;”。

对了,光有距离判断还不够,你想想,要是马里奥跳到蘑菇怪头顶的平台上,蘑菇怪总不能飞上去追吧?这时候就得加个“视野高度限制”。比如判断马里奥和蘑菇怪的Y轴坐标差距,如果超过2米,就算距离在10米内,蘑菇怪也不追——代码里加一句“if (Mathf.Abs(player.position.y

  • transform.position.y) > 2f) { return; }”就行。我之前忘了加这个,结果蘑菇怪对着悬崖上面的马里奥一直原地打转,看起来特别傻,加了高度限制后就正常多了。

要是你还想让蘑菇怪更聪明点,比如追丢了会回原来的地方继续巡逻,也有办法。在Enemy脚本里用个Vector2变量存一下蘑菇怪一开始的位置,比如startPosition,在Start()方法里赋值startPosition = transform.position; 然后当马里奥跑出10米范围时,就让蘑菇怪朝着startPosition移动,回到原位后继续左右走。这样一来,蘑菇怪就不是只会一根筋追人了,游戏里的敌人行为也更真实。你可以先从简单的距离判断开始试,跑通了再一点点加这些细节,反正Unity支持实时调试,改完代码按Ctrl+S,游戏运行着就能看到效果,特别方便。


制作Unity3D超级马里奥小游戏需要安装什么软件?对电脑配置有要求吗?

主要需要安装Unity Hub和Unity编辑器,推荐使用2021-2023版本(兼容性较好),可在Unity官网免费下载个人版。电脑配置方面,最低4GB内存、支持DirectX 11的显卡即可运行,不过如果场景素材较多, 8GB内存+独立显卡,避免运行时卡顿。

找不到合适的马里奥风格素材怎么办?可以自己画吗?

如果免费素材站(如itch.io、Unity Asset Store)的资源不符合需求,完全可以自己画。新手可用GIMP、Krita等免费绘图软件,像素尺寸 32×32或64×64(适配2D游戏),保存为PNG格式。导入Unity时记得在Inspector面板将“Sprite Mode”设为“Multiple”,用“Sprite Editor”手动切片,比自动切片更精准。

马里奥跳起来落地后卡顿怎么办?移动不流畅是什么原因?

常见原因有三个:一是刚体设置问题,检查“Rigidbody 2D”的“Gravity Scale”( 2-3)和“Linear Damping”(0.3-0.5,避免突然停止);二是地面碰撞体未正确设置,确保Tilemap添加“Composite Collider 2D”并勾选“Used By Composite”;三是移动代码放在了Update里,物理相关逻辑(如移动、跳跃) 放在FixedUpdate中,让移动更平滑。

蘑菇怪只会左右走,怎么让它有更复杂的行为(比如追马里奥)?

可以在Enemy脚本中添加检测马里奥位置的逻辑。比如用“GameObject.FindWithTag(“Player”)”获取马里奥对象,计算敌人与马里奥的距离,当距离小于10米(可自定义)时,让敌人向马里奥移动:“Vector2 direction = (player.position

  • transform.position).normalized; rb.velocity = direction * moveSpeed;”。记得添加“视野范围”判断,避免敌人无限制追着马里奥跑。

做好的小游戏怎么保存和分享给别人玩?

保存很简单,按Ctrl+S保存当前场景,再在菜单栏选“File > Save Project”保存整个项目。分享的话,通过“File > Build Settings”打包:选择对应平台(如Windows),点击“Add Open Scenes”把当前场景添加到打包列表,最后点“Build”选择保存路径,生成exe文件后就能发给别人直接运行了。打包前 先在Unity中按Ctrl+P测试,确保没有bug。

资源下载
资源下载
更新时间:13/06/2025
运行环境:Linux
源码类型:Unity3D小游戏
原文链接:https://www.mayiym.com/28469.html,转载请注明出处。
0
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录

微信扫一扫关注
如已关注,请回复“登录”二字获取验证码