当前位置: 首页 > news >正文

游戏和编程两不误:用Unity做一个简单小游戏

玩游戏不如做游戏。今天带你从零开始用Unity开发一款可玩的“星星收集者”顺便学会C#编程基础。 你好我是 Evan一名计算机专业的学长也是《大一突围》专栏的作者。大一时我沉迷游戏后来想与其被动玩不如主动做。于是自学Unity花两周做出了第一个小游戏。那种“我的代码创造了世界”的成就感比通关任何3A大作都爽。今天我就把这套方法教给你——不需要游戏开发经验只要会一点编程基础就能跟着做出一个能玩的小游戏。你会发现游戏和编程本就是天生一对。欢迎来到《大一突围》专栏。一、为什么大一就要尝试做游戏即时正反馈你改一个数字游戏里角色就跑得更快这种刺激让你愿意持续优化。综合能力锻炼涉及逻辑、数学、美术至少布局、音效、用户体验。作品集杀手锏一份能玩的游戏比10个控制台项目更让面试官记住你。二、准备安装Unity并创建第一个项目2.1 下载并安装Unity Hub访问 unity.com/cn下载Unity Hub。在Hub中安装Unity 2022 LTS版本长期支持版稳定。安装时勾选Windows Build Support如果使用Mac则选Mac和Visual Studio或VS Code组件。2.2 创建新项目打开Unity Hub →New project→ 选择2D Core我们做2D游戏更简单。项目名称StarCollector位置自己记住的文件夹点击Create project界面速览Scene视图摆放游戏物体的工作区。Game视图运行时看到的画面。Hierarchy场景中所有物体列表。Inspector选中物体的属性面板。Project项目文件脚本、素材等。 首次打开可能需要编译耐心等待。三、游戏设计星星收集者游戏玩法玩家控制一个小球Player在场景中移动。场景中随机生成若干星星Star触碰星星则得分星星消失并重生到新位置。显示当前得分。加上一个倒计时60秒时间到显示最终分数。核心知识点玩家移动通过键盘方向键/WASD。碰撞检测触发器。UI 文本更新得分、倒计时。随机生成位置。游戏循环Update、FixedUpdate、协程。四、搭建游戏场景一步一步截图说明这里用文字图示4.1 创建玩家Player在Hierarchy右键 →2D Object→Sprites→Circle命名为Player。在Inspector中设置Transform的 Position 为 (0, 0, 0)。添加Rigidbody 2D组件用于物理移动点击Player→Add Component→Rigidbody 2D将Body Type设为Dynamic将Linear Drag设为2让移动有摩擦力不会一直滑将Gravity Scale设为0不要受重力影响添加Circle Collider 2D组件用于碰撞检测点击Player→Add Component→Circle Collider 2D勾选Is Trigger不我们想要物理碰撞所以不勾。但为了收集星星星星的碰撞器要设为触发器。4.2 创建星星Star创建一个2D Object→Sprites→Star如果默认没有星星形状可用Square代替稍后改颜色或贴图。命名为Star。添加Circle Collider 2D或 Box Collider 2D勾选Is Trigger这样玩家碰到它不会物理反弹而是触发事件。将星星做成Prefab预制体将Star从 Hierarchy 拖拽到 Project 窗口中的文件夹例如新建Prefabs文件夹。然后删掉场景中的星星我们稍后用代码生成多个。4.3 创建地面边界墙壁为了让玩家不跑出屏幕我们创建四面墙壁创建四个2D Object→Sprites→Square分别命名为WallTop、WallBottom、WallLeft、WallRight。调整它们的 Transform位置根据 Camera 视图默认Camera是正交大小5意味着屏幕高度10单位宽度取决于分辨率。简易做法设置墙壁厚度0.5长度足够。建议Top 墙位置 (0, 5.5)Scale (12, 0.5)Bottom 墙 (0, -5.5)Left 墙 (-6.5, 0)Scale (0.5, 11)Right 墙 (6.5, 0)。给每个墙壁添加Box Collider 2D不要勾选 Is Trigger使玩家无法穿过。也可以采用另一种方法给玩家添加移动范围限制代码但墙壁更直观。4.4 UI 文本得分和倒计时右键 Hierarchy →UI→Text - TextMeshPro如果没有TMPUnity会提示导入同意即可。命名为ScoreText设置位置左上角例如 -300, 200。复制一个命名为TimerText放在右上角。在 Inspector 中可调节字体大小、颜色。五、编写脚本核心代码有详细注释5.1 玩家移动脚本PlayerController.cs在 Project 窗口中右键 →Create→C# Script命名PlayerController双击打开Visual Studio。using UnityEngine; public class PlayerController : MonoBehaviour { public float moveSpeed 10f; // 移动速度 private Rigidbody2D rb; void Start() { rb GetComponentRigidbody2D(); } void Update() { // 获取输入水平左右垂直上下 float moveX Input.GetAxisRaw(Horizontal); float moveY Input.GetAxisRaw(Vertical); // 移动方向向量 Vector2 moveDirection new Vector2(moveX, moveY).normalized; rb.velocity moveDirection * moveSpeed; } }将这个脚本拖拽到Player物体上。运行游戏应该能用方向键移动了。5.2 星星收集脚本Star.cs创建脚本Star挂载到Star预制体上。using UnityEngine; public class Star : MonoBehaviour { // 当玩家进入触发器时调用 private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag(Player)) { // 通知 GameManager 增加分数 GameManager.Instance.AddScore(10); // 将星星移动到随机位置 Reposition(); } } void Reposition() { // 随机位置范围X -5.5 到 5.5Y -4.5 到 4.5根据边界调整 float randomX Random.Range(-5.5f, 5.5f); float randomY Random.Range(-4.5f, 4.5f); transform.position new Vector2(randomX, randomY); } }注意需要给Player添加Player标签Inspector 中 Tag 下拉菜单选择 Player如果不存在就 Add Tag。5.3 游戏管理器GameManager.cs这个脚本负责分数、计时器、游戏结束等全局逻辑。创建脚本GameManager。using UnityEngine; using UnityEngine.UI; // 使用 UI 需要引入 using TMPro; // TextMeshPro public class GameManager : MonoBehaviour { public static GameManager Instance; // 单例模式 public int score 0; public float timeRemaining 60f; // 倒计时60秒 public TMP_Text scoreText; public TMP_Text timerText; public GameObject gameOverPanel; // 游戏结束面板稍后创建 private bool isGameOver false; void Awake() { // 实现单例 if (Instance null) Instance this; else Destroy(gameObject); } void Start() { UpdateScoreUI(); UpdateTimerUI(); gameOverPanel.SetActive(false); } void Update() { if (isGameOver) return; // 倒计时逻辑 if (timeRemaining 0) { timeRemaining - Time.deltaTime; UpdateTimerUI(); } else { GameOver(); } } public void AddScore(int amount) { if (isGameOver) return; score amount; UpdateScoreUI(); } void UpdateScoreUI() { scoreText.text 得分: score; } void UpdateTimerUI() { // 显示整数秒 timerText.text 时间: Mathf.CeilToInt(timeRemaining).ToString(); } void GameOver() { isGameOver true; gameOverPanel.SetActive(true); // 停止玩家移动通过查找玩家并禁用脚本 GameObject player GameObject.FindGameObjectWithTag(Player); if (player ! null) player.GetComponentPlayerController().enabled false; // 禁用所有星星的触发器可选 // 显示最终分数在面板上 Text finalText gameOverPanel.GetComponentInChildrenText(); if (finalText ! null) finalText.text 游戏结束总分: score; Time.timeScale 0; // 暂停游戏 } }在场景中创建一个空物体GameObject → Create Empty命名为GameManager挂载此脚本。然后将ScoreText和TimerText从 Hierarchy 拖到脚本对应槽位。创建gameOverPanel在 Hierarchy 右键 → UI → Panel命名为GameOverPanel。在其下创建 Text 作为标题以及一个 ButtonRestart。按钮功能我们先不实现复杂重启可以简单显示分数。将GameOverPanel拖到脚本的gameOverPanel槽位并在 Start 中 SetActive(false)。5.4 生成多个星星在GameManager中添加一个数组public GameObject starPrefab;和public int starCount 10;然后在Start中循环生成。public GameObject starPrefab; public int starCount 10; void Start() { // ... 原有代码 for (int i 0; i starCount; i) { Instantiate(starPrefab, GetRandomPosition(), Quaternion.identity); } } Vector2 GetRandomPosition() { float x Random.Range(-5.5f, 5.5f); float y Random.Range(-4.5f, 4.5f); return new Vector2(x, y); }在 Inspector 中将Star预制体拖到starPrefab槽位设置starCount为 10。注意星星的OnTriggerEnter2D中调用GameManager.Instance.AddScore(10);之前已经写了。需要确保星星预制体上挂载了Star脚本。六、运行与调试点击 Unity 编辑器顶部的Play按钮。使用 WASD 或方向键控制小球移动触碰星星会加分并跳转到随机位置。倒计时结束后游戏停止显示结束面板。常见问题玩家移动卡顿调整Linear Drag或者增加速度。星星穿墙确保墙壁的 Collider 2D 没有勾选Is Trigger。分数不增加检查Star脚本中other.CompareTag(Player)是否准确且 Player 标签已设置。游戏结束后还能移动GameOver中已经禁用PlayerController但如果有 Rigidbody 速度还需设置rb.velocity Vector2.zero。七、让游戏更好玩改进和扩展思路具体改进建议计时器加速随着时间减少星星移动速度变快或玩家速度变慢。音效收集星星时播放“叮”声。导入音频片段使用AudioSource.PlayClipAtPoint。粒子特效收集星星时播放闪光粒子。不同分值金色星星20蓝色5。排行榜保存最高分PlayerPrefs。八、发布游戏给朋友玩Build SettingsFile → Build Settings → 点击Add Open Scenes添加当前场景。选择平台PC、Mac、WebGL等。点击Build选择一个文件夹生成可执行文件.exe或网页版。发送给朋友对方无需安装Unity即可运行。九、总结与学习资源推荐通过这个小游戏你学会了Unity 2D 基础操作Rigidbody2D 和碰撞器触发器检测和游戏逻辑UI 更新、单例模式、协程虽然没有用但可以扩展发布游戏下一步学习资源Unity Learn 官方教程免费Brackeys YouTube 频道经典《Unity 实战》书籍Evan 说做游戏是学习编程最快乐的方式。当你看到朋友玩你做的游戏时那份成就感会推着你不断深入。别怕代码报错每个Bug都是你成长的机会。❓ 问题你想用Unity做什么类型的游戏RPG、平台跳跃还是射击或者在制作过程中遇到了什么奇葩Bug欢迎在评论区分享我会选出 3 位同学送出《Unity 常用脚本片段合集》和《游戏设计脑图模板》。如果本文点燃了你做游戏的热情请点 赞 关注本专栏《大一突围》持续输出编程与游戏开发干货。收藏本文跟着步骤做出你的第一款游戏然后分享给我玩
http://www.zskr.cn/news/1366707.html

相关文章:

  • SPT-AKI Profile Editor:逃离塔科夫离线版终极存档编辑器完全指南
  • LSLib:神界原罪与博德之门3游戏资源处理的终极指南
  • ZXPInstaller终极指南:免费开源工具轻松搞定Adobe插件安装
  • WarcraftHelper技术架构深度解析:Windows游戏兼容性解决方案实现
  • 如何快速掌握Zotero中文文献管理:茉莉花插件完整指南
  • 深度学习在睡眠分期技术中的应用与SLEEPYLAND工具箱解析
  • FFmpegGUI:让视频处理变得简单的图形化工具
  • 植物大战僵尸终极修改器:PvZ Toolkit 完全使用指南与实战技巧
  • 小微团队如何利用Taotoken统一管理AI模型调用与成本
  • Visual C++运行库终极解决方案:一劳永逸解决Windows软件兼容性问题
  • MacType终极指南:如何快速解决Windows字体模糊问题
  • 线段树入门:查询与更新操作
  • PCL2启动器微软账户登录皮肤显示问题完整解决方案
  • 使用Taotoken稳定直连服务为Claude Code配置备用API通道
  • Burp Suite安装配置手术级指南:Java环境、代理链路与证书信任全解析
  • Unity IDE对比:Rider与VS2019在热重载、调试、Shader和IL2CPP中的实战差异
  • 设计模式实战解读(一):单例模式——全局唯一实例的正确打开方式
  • 2026年最新整理:目前市面上有没有评价很高的英语教学软件推荐?
  • Rust并发安全模式:从线程同步到无锁编程
  • 告别混乱!一张图理清Ubuntu网络管理变迁:从interfaces到Netplan,再到NetworkManager全解析
  • WeChatMsg:如何将微信聊天记录转化为永久数字资产
  • 如何轻松搞定Windows系统依赖:一站式Visual C++运行库完整指南
  • BOTW存档编辑器GUI:Switch平台开源存档修改工具深度解析
  • 终极宽屏体验:如何为《植物大战僵尸》打造专业级宽屏模组
  • Heightmapper完整指南:5分钟免费制作真实3D地形高度图
  • 2026肇庆厂房搬迁攻略:设备搬运避坑指南 - 从来都是英雄出少年
  • 90+格式全支持!ImageGlass:Windows平台最强大的轻量级图像浏览器
  • 基于人工蜂群算法与ANFIS的高维光谱数据特征选择与建模实践
  • Google I/O 2026 收官:Gemini Omni 世界模型 + Gemini 3.5 Flash 全面开放
  • 在Taotoken模型广场,如何根据任务类型与预算选择合适的大模型