从零上手!用Unity开发一款简单易上手的小游戏(附完整步骤+代码)

10次阅读
没有评论

作为一名刚接触Unity的新手,一直觉得“开发游戏”是件遥不可及的事——直到我亲手完成了第一款属于自己的小游戏,才发现:只要找对方法,零基础也能快速上手!今天就把这份超详细的Unity小游戏开发教程分享给大家,全程手把手,从环境搭建到打包发布,每一步都讲得明明白白,新手也能跟着做,看完就能拥有自己的第一款小游戏~

先说明一下,本次开发的是一款「旋转立方体躲避六边形」的简易休闲小游戏,核心玩法简单:玩家控制白色小球围绕中心旋转,躲避不断生成的六边形,坚持时间越长得分越高。这款游戏涵盖了Unity开发的核心基础操作——场景搭建、游戏对象创建、脚本编写、物理碰撞、UI设计,非常适合新手入门练手,既不会太复杂,又能掌握关键技能。

一、开发前准备:环境搭建与工具安装

工欲善其事,必先利其器。在开始开发前,我们需要先准备好Unity开发环境,这一步很关键,新手一定要仔细看,避免踩坑。

1. 安装Unity Hub与Unity Editor

Unity Hub是管理Unity版本和项目的工具,必须先安装它:

  • 访问Unity官方网站,下载Unity Hub安装包(官网地址:https://unity.cn/),按照安装向导一步步操作,全程默认下一步即可。
  • 打开Unity Hub,点击左侧「Installs」,再点击「Add」,选择适合新手的Unity版本(推荐2021或2022版本,兼容性好、教程资源多),勾选「Android Build Support」(后续可打包到手机)和「Visual Studio」(代码编辑器),点击安装,等待完成即可(安装过程可能需要30分钟以上,耐心等待)。

这里提醒一句:安装过程中如果出现失败,大概率是网络问题,建议切换网络重新安装;如果Visual Studio安装失败,也可以后续单独下载安装(官网地址:https://visualstudio.microsoft.com/)。

2. 明确开发目标与核心玩法

新手开发小游戏,千万不要一开始就追求复杂玩法,先确定一个简单、可落地的核心目标:

  • 核心玩法:玩家控制白色小球(Player)围绕中心旋转,躲避不断生成的六边形(障碍物),碰撞到六边形则游戏结束,坚持时间越长,得分越高。
  • 开发范围:包含场景搭建、玩家控制、障碍物生成、碰撞检测、得分统计、游戏结束逻辑、UI显示、打包发布8个核心环节。
  • 技术重点:Unity界面操作、C#脚本编写、物理组件(Rigidbody 2D、Collider 2D)使用、预制体(Prefab)创建与使用。

二、正式开发:一步步搭建属于你的小游戏

准备工作完成后,就进入核心开发环节了,我们按照「场景搭建→游戏对象创建→脚本编写→UI设计→逻辑调试」的顺序,一步步推进,每一步都有具体操作,跟着做就不会错。

第一步:创建Unity项目

  1. 打开Unity Hub,点击左侧「Projects」,再点击「New」,创建新项目。
  2. 项目模板选择「2D」(因为我们做的是2D小游戏,操作更简单),输入项目名称(比如「RotateAndAvoid」),选择项目保存路径(建议放在没有中文的文件夹下,避免出现报错)。
  3. 点击「Create」,等待Unity加载项目,首次加载可能需要几分钟,加载完成后,就进入了Unity的主编辑界面。

这里简单介绍一下Unity主界面的核心面板(新手必看):

  • Hierarchy(层级)面板:显示当前场景中的所有游戏对象,比如摄像机、玩家、障碍物等,可在这里添加、删除、组织游戏对象。
  • Scene(场景)面板:可视化编辑区域,可在这里调整游戏对象的位置、旋转、缩放,搭建游戏场景。
  • Game(游戏)面板:预览游戏效果,点击「Play」按钮即可运行游戏,查看实际操作效果。
  • Inspector(检查器)面板:显示选中游戏对象的属性和组件,可在这里修改对象参数、添加组件。
  • Project(项目)面板:存储项目的所有资源,比如脚本、图片、预制体等,可在这里创建、管理资源。

第二步:搭建游戏场景

场景是游戏的“舞台”,我们需要先搭建一个简单的游戏场景,包含背景、旋转中心、玩家、障碍物生成器4个核心元素。

  1. 设置背景:选中Hierarchy面板中的「Main Camera」(主摄像机),在Inspector面板中修改「Background」颜色(比如设置为深色,突出游戏元素),调整摄像机的「Size」为5,确保场景能完整显示。
  2. 创建旋转中心:在Hierarchy面板右键点击,选择「2D Object→Sprites→Circle」,创建一个圆形,命名为「Center」(旋转中心)。选中「Center」,在Inspector面板中修改「Sprite」为「Knob」(Unity自带的圆形图标),调整「Color」为半透明黑色,「Transform」的「Position」设为(0,0,0),确保它在场景中心。
  3. 创建玩家(Player):右键点击Hierarchy面板,选择「2D Object→Sprites→Circle」,命名为「Player」。修改「Sprite」为「Knob」,「Color」为白色,「Transform」的「Position」设为(0,0.8,0)(在旋转中心上方),大小调整为0.3。
  4. 创建障碍物生成器(Spawner):右键点击Hierarchy面板,选择「Create Empty」,命名为「Spawner」,「Transform」的「Position」设为(0,0,0),用于控制六边形障碍物的生成。

第三步:添加组件,赋予游戏对象功能

Unity中的游戏对象本身没有功能,需要通过添加「组件」来赋予它们功能,比如物理运动、碰撞检测等。我们为Player和障碍物分别添加必要的组件。

  1. 为Player添加组件:
    1. 选中「Player」,点击Inspector面板中的「Add Component」,搜索并添加「Rigidbody 2D」(物理组件,实现物理运动),将「Body Type」设为「Kinematic」(不受重力影响,仅受脚本控制)。
    2. 再添加「Circle Collider 2D」(碰撞组件,用于碰撞检测),勾选「Is Trigger」(设为触发器,方便检测碰撞)。
  2. 创建障碍物预制体(Hexagon):
    1. 右键点击Hierarchy面板,选择「2D Object→Effects→Line」,命名为「Hexagon」,作为障碍物。
    2. 选中「Hexagon」,在Inspector面板中修改「Line」的「Positions」,设置6个节点(对应六边形的6个顶点),调整节点坐标,使它成为一个正六边形。
    3. 为「Hexagon」添加「Rigidbody 2D」组件,「Body Type」设为「Kinematic」;添加「Edge Collider 2D」组件,设置6个碰撞节点,与六边形轮廓一致。
    4. 将「Hexagon」从Hierarchy面板拖到Project面板中,创建预制体(Prefab),之后删除Hierarchy面板中的「Hexagon」(后续通过脚本生成)。

第四步:编写C#脚本,实现游戏逻辑

脚本是游戏的“灵魂”,通过编写C#脚本,我们可以实现玩家控制、障碍物生成、碰撞检测、得分统计等核心逻辑。Unity使用C#作为主要编程语言,新手不用害怕,代码都有详细注释,直接复制粘贴即可,后续再慢慢理解。

首先,我们需要创建4个核心脚本,分别对应玩家控制、障碍物逻辑、生成器逻辑、游戏管理(得分、游戏结束)。

1. 玩家控制脚本(Player.cs)

功能:实现玩家通过键盘左右键控制小球围绕中心旋转。

  1. 在Project面板右键点击,选择「Create→C# Script」,命名为「Player」。
  2. 双击脚本,打开Visual Studio(如果没有自动打开,右键脚本选择「Open with Visual Studio」)。
  3. 删除默认代码,复制以下代码(带详细注释):
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Player : MonoBehaviour
{
    // 移动速度,可在Inspector面板调整
    public float moveSpeed = 600f;
    // 旋转中心(拖拽赋值)
    public Transform center;
    private float movement = 0f;

    // 每帧更新(处理输入)
    void Update()
    {
        // 获取键盘输入(左右方向键或A/D键)
        movement = Input.GetAxisRaw("Horizontal");
    }

    // 固定帧率更新(处理物理运动)
    private void FixedUpdate()
    {
        // 围绕中心旋转
        transform.RotateAround(center.position, Vector3.forward, -movement * moveSpeed * Time.fixedDeltaTime);
    }

    // 碰撞检测(碰到障碍物触发)
    private void OnTriggerEnter2D(Collider2D other)
    {
        // 判断碰撞的是障碍物(标签为Hexagon)
        if (other.gameObject.CompareTag("Hexagon"))
        {
            // 调用游戏结束方法
            GameManager.Instance.GameOver();
        }
    }
}

保存脚本,回到Unity,将「Player」脚本拖到Hierarchy面板的「Player」对象上。然后在Inspector面板中,将「Center」对象拖拽到「Player」脚本的「Center」字段中(赋值旋转中心)。

2. 障碍物逻辑脚本(Hexagon.cs)

功能:实现六边形障碍物不断缩小、旋转,最终消失,增加游戏难度。

  1. 在Project面板创建C# Script,命名为「Hexagon」。
  2. 双击打开,复制以下代码:
using UnityEngine;

public class Hexagon : MonoBehaviour
{
    // 缩小速度
    public float shrinkSpeed = 0.5f;
    // 旋转速度
    public float rotateSpeed = 20f;

    void Update()
    {
        // 不断缩小障碍物
        transform.localScale -= new Vector3(shrinkSpeed * Time.deltaTime, shrinkSpeed * Time.deltaTime, 0);
        // 不断旋转障碍物
        transform.Rotate(0, 0, rotateSpeed * Time.deltaTime);

        // 当障碍物缩小到一定程度,自动销毁
        if (transform.localScale.x < 0.1f)
        {
            Destroy(gameObject);
        }
    }
}

保存脚本,将「Hexagon」脚本拖到Project面板中的「Hexagon」预制体上,这样后续生成的所有六边形都会拥有这个逻辑。

3. 障碍物生成器脚本(Spawner.cs)

功能:每隔一定时间,在场景中随机位置生成六边形障碍物。

  1. 在Project面板创建C# Script,命名为「Spawner」。
  2. 双击打开,复制以下代码:
using UnityEngine;

public class Spawner : MonoBehaviour
{
    // 六边形预制体(拖拽赋值)
    public GameObject hexagonPrefab;
    // 生成间隔(秒),可调整难度
    public float spawnInterval = 1f;
    // 生成范围(距离中心的最大距离)
    public float spawnRange = 5f;

    void Start()
    {
        // 每隔spawnInterval秒,调用一次生成障碍物的方法
        InvokeRepeating("SpawnHexagon", 1f, spawnInterval);
    }

    // 生成障碍物的方法
    void SpawnHexagon()
    {
        // 随机生成位置(围绕中心,在指定范围内)
        Vector2 spawnPosition = Random.insideUnitCircle * spawnRange;
        // 生成六边形障碍物
        Instantiate(hexagonPrefab, spawnPosition, Quaternion.identity);
    }
}

保存脚本,将「Spawner」脚本拖到Hierarchy面板的「Spawner」对象上。然后在Inspector面板中,将Project面板中的「Hexagon」预制体拖拽到「Spawner」脚本的「Hexagon Prefab」字段中。

4. 游戏管理脚本(GameManager.cs)

功能:管理游戏得分、游戏结束逻辑、UI显示,采用单例模式,方便其他脚本调用。

  1. 在Project面板创建C# Script,命名为「GameManager」。
  2. 双击打开,复制以下代码:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    // 单例模式,确保整个游戏只有一个GameManager
    public static GameManager Instance;

    // 得分文本(拖拽赋值)
    public Text scoreText;
    // 游戏结束面板(拖拽赋值)
    public GameObject gameOverPanel;

    private int score = 0;
    private bool isGameOver = false;

    void Awake()
    {
        // 单例模式初始化
        if (Instance == null)
        {
            Instance = this;
        }
        else
        {
            Destroy(gameObject);
        }
    }

    void Start()
    {
        // 初始化游戏状态
        score = 0;
        scoreText.text = "得分: " + score;
        gameOverPanel.SetActive(false);
        isGameOver = false;
    }

    void Update()
    {
        // 游戏未结束时,每帧增加得分
        if (!isGameOver)
        {
            score += (int)(Time.deltaTime * 10); // 每秒增加10分
            scoreText.text = "得分: " + score;
        }

        // 游戏结束后,按R键重新开始
        if (isGameOver && Input.GetKeyDown(KeyCode.R))
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().name);
        }
    }

    // 游戏结束方法
    public void GameOver()
    {
        isGameOver = true;
        gameOverPanel.SetActive(true); // 显示游戏结束面板
        Time.timeScale = 0; // 暂停游戏
    }
}

保存脚本,在Hierarchy面板右键点击,选择「Create Empty」,命名为「GameManager」,将「GameManager」脚本拖到这个对象上。

第五步:设计UI界面,完善游戏体验

UI是玩家与游戏交互的窗口,我们需要添加得分显示和游戏结束面板,让游戏体验更完整。

  1. 添加得分文本:
    1. 右键点击Hierarchy面板,选择「UI→Text」,创建一个文本对象,命名为「ScoreText」。
    2. 在Inspector面板中,调整文本的位置(比如放在屏幕左上角),修改字体大小为36,颜色为白色,默认文本为「得分: 0」。
    3. 选中「GameManager」对象,在Inspector面板中,将「ScoreText」对象拖拽到「GameManager」脚本的「Score Text」字段中。
  2. 添加游戏结束面板:
    1. 右键点击Hierarchy面板,选择「UI→Panel」,创建一个面板对象,命名为「GameOverPanel」。
    2. 调整面板大小,使其覆盖整个屏幕,背景颜色设为半透明黑色(方便查看)。
    3. 在面板上添加两个文本对象:一个显示「游戏结束」(字体大小60,居中),一个显示「按R键重新开始」(字体大小24,居中,在「游戏结束」下方)。
    4. 选中「GameOverPanel」,在Inspector面板中取消勾选「Active」(默认隐藏),然后将其拖拽到「GameManager」脚本的「Game Over Panel」字段中。

第六步:设置标签,避免碰撞检测出错

为了让碰撞检测正常工作,我们需要给六边形障碍物设置标签,让Player脚本能识别它。

  1. 选中Project面板中的「Hexagon」预制体,在Inspector面板顶部的「Tag」下拉菜单中,选择「Add Tag」。
  2. 点击「+」,输入标签名称「Hexagon」,点击「Save」保存。
  3. 再次选中「Hexagon」预制体,在「Tag」下拉菜单中选择「Hexagon」,完成标签设置。

三、测试调试:解决开发中的小问题

开发完成后,一定要进行测试,排查可能出现的问题,新手常见的问题及解决方法如下:

  • 问题1:Player无法旋转? 解决方法:检查Player脚本是否挂载到Player对象上,Center字段是否正确赋值,moveSpeed是否设置合理(建议600左右)。
  • 问题2:六边形不生成? 解决方法:检查Spawner脚本是否挂载到Spawner对象上,Hexagon Prefab字段是否正确赋值,spawnInterval是否设置合理(建议1秒)。
  • 问题3:碰撞后游戏不结束? 解决方法:检查Player的Circle Collider 2D是否勾选「Is Trigger」,Hexagon预制体的标签是否设置为「Hexagon」,碰撞组件是否添加正确。
  • 问题4:游戏结束后面板不显示? 解决方法:检查GameManager脚本的Game Over Panel字段是否正确赋值,GameOverPanel是否默认隐藏。

测试时,点击Unity顶部的「Play」按钮,运行游戏,按左右方向键控制Player旋转,躲避六边形,测试得分是否正常、游戏结束逻辑是否生效。如果出现问题,查看Console面板(快捷键Ctrl+Shift+C),根据错误提示排查问题。

四、打包发布:让你的小游戏可以被别人玩到

测试无误后,就可以将游戏打包发布了,这里我们以打包成Windows可执行文件为例(新手最容易操作),也可以打包成Android、WebGL等格式。

  1. 点击Unity顶部的「File→Build Settings」,打开构建设置窗口。
  2. 在「Scenes In Build」中,点击「Add Open Scenes」,将当前场景添加到打包列表中(确保场景名称正确)。
  3. 在「Platform」中,选择「PC, Mac & Linux Standalone」,点击「Switch Platform」,等待平台切换完成。
  4. 点击「Build」,选择打包保存路径(建议新建一个文件夹,命名为「Build」),点击「选择文件夹」,等待打包完成。
  5. 打包完成后,打开保存路径,找到「RotateAndAvoid.exe」文件,双击即可运行游戏,也可以将这个文件夹分享给朋友,让他们也能玩到你的小游戏~

如果想打包成Android版本,需要提前安装Android SDK(在Unity Hub安装Unity时勾选「Android Build Support」即可),然后在Build Settings中选择「Android」,设置好游戏图标、包名,即可打包成APK文件,安装到手机上运行。

五、新手总结与进阶建议

到这里,一款简单的Unity小游戏就开发完成了!整个过程下来,你应该已经掌握了Unity的基础操作、C#脚本编写、物理组件使用、UI设计和打包发布等核心技能。作为新手,我想说:

  • 不要害怕报错:开发过程中出现报错是正常的,多查看Console面板的错误提示,多百度、多查官方文档,慢慢就能学会排查问题。
  • 不要追求复杂:新手先从简单的小游戏入手,掌握基础后,再逐步添加复杂功能(比如音效、动画、关卡系统)。
  • 多练习、多尝试:Unity的学习没有捷径,只有多动手、多练习,才能熟练掌握各种操作和技巧。

进阶建议:如果想进一步优化这款游戏,可以尝试添加这些功能:

  • 添加音效:比如玩家移动音效、碰撞音效、得分音效,提升游戏体验。
  • 添加动画:给Player和六边形添加动画效果,让游戏更生动。
  • 增加难度梯度:随着游戏时间增加,六边形生成速度加快、缩小速度加快,增加游戏挑战性。
  • 添加排行榜:记录玩家的最高得分,增加游戏的可玩性。

最后,希望这篇教程能帮助到每一位想入门Unity游戏开发的新手。开发游戏的过程虽然会遇到各种问题,但当你亲手完成自己的第一款小游戏时,那种成就感是无法替代的。赶紧动手试试吧,你也可以成为一名游戏开发者

如果在开发过程中遇到问题,欢迎在评论区留言,我们一起交流学习~ 后续我也会分享更多Unity开发教程,关注我,一起解锁更多游戏开发技能!

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)