从0到1搭框架:Unity环境配置与核心源码拆解
先把“工作台”搭好:Unity安装与项目初始化
你可能会说“装软件都怕搞错版本”,确实,我之前帮朋友装Unity时,他随手选了最新测试版,结果导入资源包全是报错。其实新手选LTS长期支持版最稳(比如2022.3.x版本),官网直接搜“Unity LTS”就能找到,安装时记得勾选“Unity Hub”和“2D模块”——2D模块里的Tilemap和精灵工具正是做马里奥这种横版游戏必需的。
装好后新建项目,模板选“2D Core”,名称就叫“MarioClone”。进编辑器后先别急写代码,把资源包准备好:我通常会去itch.io搜“free mario assets”(比如“Pixel Platformer Pack”这类免费像素资源),或者直接用Unity自带的“2D Sprite”画简单方块代替。导入资源后,先在Project窗口建几个文件夹:Scripts
(放代码)、Sprites
(放图片)、Audio
(放音效)、Prefabs
(放预制体)——别小看分类,我见过有人代码和图片堆一起,后期改东西找文件能找疯。
让角色“活”起来:Player控制器核心源码
角色动不了,游戏就无从谈起。我带学弟时,第一步就是让他实现“左右移动+跳跃”,这段代码虽然短,但细节决定手感。先在Hierarchy窗口右键新建“2D Object > Sprite”,改名叫“Player”,然后Add Component加这三个组件:Rigidbody2D
(物理身体)、BoxCollider2D
(碰撞体)、Animator
(动画,暂时可以不管)。
重点看Rigidbody2D
的设置:Body Type选“Dynamic”,Gravity Scale设3(数值越大掉得越快,马里奥原版大概在2.5-3之间,我测试过3手感最接近),Linear Drag给0.1(让移动更顺滑)。然后在Scripts
文件夹右键新建C#脚本,命名“PlayerController”,双击打开VS Code(或MonoDevelop)
Input.GetAxis("Horizontal")
:Unity自带的输入系统,不用自己判断键盘按键,按A是-1,按D是1,完美实现左右移动isGrounded
变量:防止角色在空中无限跳,必须碰到地面(标签设为”Ground”的物体)才能再次跳跃rb.velocity
:直接修改刚体速度,比用Transform.Translate
好——后者会忽略物理碰撞,角色可能直接穿墙
我学弟第一次写时漏了isGrounded
的判断,结果角色能一直跳上天,后来加了这个变量才正常。你写完后记得给地面物体(比如新建的Sprite)打上“Ground”标签,不然跳不起来别慌,检查标签是不是拼错了(区分大小写!)。
功能升级:敌人AI、金币系统与关卡设计的源码实战
让蘑菇怪动起来:敌人巡逻AI源码
马里奥里的蘑菇怪(Goomba)只会左右走,碰到墙就转头,这个逻辑其实很简单。先新建一个“Enemy”精灵,同样加Rigidbody2D
(Gravity Scale设0,让它不会掉下去)和BoxCollider2D
,然后新建“EnemyAI”脚本:
using UnityEngine;
这里有个“Edge”标签是什么?就是悬崖检测——你总不想蘑菇怪走着走着掉下去吧?新建空物体作为Enemy的子物体,位置放在敌人脚边靠前一点,加BoxCollider2D
并勾选“Is Trigger”,标签设为“Edge”。这样当敌人走到悬崖边,子物体检测不到地面(需要给地面加“Ground”标签),就会触发翻转。
我之前做的时候偷懒没加悬崖检测,结果蘑菇怪全掉坑里了,后来加了这个“Edge”触发器才解决。对了,敌人和玩家的碰撞逻辑也得写:在PlayerController里加一段OnCollisionEnter2D
,如果碰到标签为“Enemy”的物体,就触发死亡(比如播放动画后重新加载关卡)。
收集金币爽感拉满:金币系统与UI显示源码
捡金币的“叮”一声和分数上涨,是马里奥的灵魂之一。先做金币预制体:新建Sprite(用圆形或金币图片),加CircleCollider2D
并勾选“Is Trigger”,标签设为“Coin”,然后新建“Coin”脚本:
using UnityEngine;
using UnityEngine.UI;UI部分很简单:在Hierarchy窗口右键“UI > Text”,调整位置到左上角,把Text组件拖给ScoreManager的scoreText变量。我学弟当时忘了把Text拖过去,结果捡金币没反应,排查半天才发现——所以写完代码一定要检查变量是否赋值!
最后教你个小技巧:用Tilemap画关卡。Window > 2D > Tile Palette,新建瓦片集,把地面图片拖进去,然后就能像拼乐高一样画地图了。记得给画好的地面加“Ground”标签,不然角色会掉下去哦。
你按这个流程做,周末绝对能跑通基础版。要是卡在哪一步,或者想加火球、水管传送这些功能,随时回来留言,我教你怎么改源码!
找马里奥风格的素材,itch.io确实是个宝藏站,但有时候翻久了眼睛累,我再给你说几个亲测好用的备选。OpenGameArt.org你一定要存一下,上面的2D像素资源多到挑花眼,我之前做马里奥复刻的时候,金币旋转动画、砖块破碎音效都是在这儿下的。最关键的是它支持商用,你要是以后想把做好的小游戏发到网上分享,也不用担心版权问题——不过记得筛选时勾“Public Domain”或“CC0”标签,这些是完全免费无限制的,省得后面麻烦。
Unity Asset Store也不能错过,毕竟咱们用的就是Unity引擎,里面的素材兼容性最好。直接搜“2D Platformer Free”,前几个结果里经常有官方或优质开发者做的免费包,比如我上个月还看到一个包含100多种像素地形块的资源,从草地到城堡砖块都有,甚至带简单的碰撞体预设,拖进场景就能用。对了,Kenney.nl的极简风格素材也很适合新手,角色和道具都是低多边形像素风,线条简单但辨识度高,你要是懒得自己画角色动画,直接用它的“Platformer Character”包,里面跑、跳、蹲的动作帧都给你做好了,改改颜色就能变成自己的马里奥。不过下载前最好瞟一眼授权协议,个人学习肯定没问题,但要是想做商业化项目,有些素材可能需要署名原作者,这点得注意。
零基础学Unity做仿马里奥游戏,需要先学编程吗?
不需要系统学编程,但 了解基础逻辑。文章中的代码片段都有详细注释,重点关注变量含义(如moveSpeed控制移动速度)和关键函数(如OnCollisionEnter2D检测碰撞),跟着敲代码时理解“左右移动用Input.GetAxis,跳跃判断isGrounded”等核心逻辑即可。我带的学弟也是零基础,先模仿再修改参数(比如调整jumpForce数值看效果),很快就能上手。
为什么推荐用Unity的LTS版本,普通版本不能用吗?
LTS版本更适合新手,因为它是“长期支持版”,稳定性高且bug少。普通版本(尤其是测试版)可能会有兼容性问题,比如文章提到的“导入资源包报错”,就是朋友用了最新测试版导致的。LTS版更新周期长,功能稳定,官网直接搜索“Unity LTS”就能下载,2022.3.x或2023.3.x版本都适合,避免选带“beta”标识的版本。
角色跳跃时总是穿模或跳不高,可能是什么原因?
常见原因有三个:①Rigidbody2D设置错误,Gravity Scale 设2.5-3(数值太小会像飘,太大落地快),Linear Drag保持0.1左右;②碰撞体大小不合适,BoxCollider2D要覆盖角色精灵,边缘别留空隙;③跳跃逻辑没判断isGrounded,导致空中多次跳跃。按文章代码检查,确保OnCollisionEnter2D里正确设置isGrounded=true,碰到“Ground”标签物体才允许跳跃。
除了itch.io,还有哪些免费资源站能下载马里奥风格素材?
除了itch.io(搜索“free pixel platformer assets”),还可以试试:①OpenGameArt.org,有大量免费2D像素图和音效,支持商用;②Unity Asset Store,搜索“2D Platformer Free”,部分官方资源包完全免费;③Kenney.nl,提供极简风格的角色、道具素材,适合新手快速搭建场景。下载时注意看授权协议,个人学习用基本都没问题。
怎么给游戏添加背景音乐和金币收集音效?
简单三步:①在Project窗口建Audio文件夹,放入下载的音乐和音效文件(格式推荐mp3或wav);②在Hierarchy新建空物体“AudioManager”,添加AudioSource组件,把背景音乐拖到“Audio Clip”,勾选“Play On Awake”和“Loop”;③金币脚本里添加音效播放:在Coin脚本的OnTriggerEnter2D中,加一行“AudioSource.PlayClipAtPoint(coinSound, transform.position);”,然后在Inspector把金币音效拖给coinSound变量即可。记得测试音量,别让音效盖过人声。