好的,请看系列第一篇。
整个系列:https://blog.youkuaiyun.com/duckerduck/category_13041643.html
Unity 2D 从零精通:第一阶段 - 启蒙与准备,认识你的新画笔
引言:欢迎来到创造者的世界
欢迎你,未来的游戏开发者!当你决定踏上这条旅程时,你手中已经握有了最强大的工具——想象力。而Unity,将是帮你将想象力变为现实的那支神奇画笔。本系列文章将作为你最可靠的指南,从最微小的像素开始,直至你能够 confidently 构建出令人惊叹的2D世界。
这第一篇,是我们的基石。它将不会涉及复杂的代码或令人眼花缭乱的特效,而是专注于最重要的事:与Unity编辑器成为朋友。正如画家必须熟悉他的画布、颜料和画笔一样,你必须对你即将日夜相伴的开发环境了如指掌。磨刀不误砍柴工,扎实的基础会让你未来的学习之路事半功倍,避免无数令人沮丧的“坑”。
我们将从安装开始,一步步探索Unity编辑器的核心界面,理解其最基本又最重要的概念,并最终亲手创建一个简单但“活”起来的2D小场景。我们的目标是:不仅知道怎么操作,更理解为什么这样操作。
第一章:万事开头——安装与项目创建
1.1 获取并安装Unity Hub
Unity的生态系统由一个叫做 Unity Hub 的中心化管理工具开始。它是你管理不同Unity版本、创建和打开项目、下载学习资源的大门。
- 访问官方网站:前往Unity官网(https://unity.com/)找到“下载”或“Get Started”按钮。通常官网会自动推荐下载Unity Hub。
- 选择个人版:Unity对个人和小型团队提供免费版本,只要你的资金或年度收入不超过10万美元,就可以放心使用Unity Personal。
- 安装与登录:下载完成后,运行安装程序。安装完毕后打开Unity Hub,你需要使用一个Unity ID登录(如果没有,请免费注册一个)。这个账号非常重要,用于同步你的偏好设置、访问云服务等。
注意:对于国内用户,你也可以选择下载中国版Unity Hub,它在网络连接和下载速度上可能会有优化,但核心功能与国际版一致。
1.2 安装Unity编辑器版本
登录Hub后,转到“安装”标签页,点击“安装编辑器”。
- 版本选择:强烈建议选择最新的长期支持版本(LTS - Long Term Support)。例如,截至撰写本文时,
2022.3 LTS是一个极佳的选择。LTS版本经过最全面的测试,非常稳定,拥有最完善的社区支持,非常适合学习和商业开发,能避免最新技术预览版可能带来的各种奇怪问题。 - 模块选择:在安装时,你会看到一个模块选择列表。对于纯2D开发,最基本的需求是:
- Microsoft Visual Studio Community:这是Unity默认的代码编辑器(IDE),用于编写C#脚本。务必勾选。
- WebGL Build Support:如果你希望将来将游戏发布到网页上。
- Android/iOS Build Support:如果你希望将来发布到移动设备。
其他模块可以暂时不安装,日后有需要可以随时通过Hub添加。
1.3 创建你的第一个项目
安装好编辑器后,在Hub的“项目”标签页中,点击“新建项目”。
- 模板选择:至关重要的一步! 请确保选择
2D模板,而不是3D或URP。选择2D模板意味着Unity会为你预先配置好适合2D开发的环境(例如,摄像机设置为正交模式,导入设置针对Sprite优化等)。 - 项目命名与路径:给你的项目起一个有意义的名字,例如
MyFirst2DWorld。为项目选择一个路径简单、没有中文和特殊符号的文件夹(例如D:\UnityProjects\)。使用中文路径是导致各种未知错误的常见原因之一,务必避免! - 点击创建:点击“创建项目”按钮,耐心等待Unity初始化你的新世界。
第二章:初窥门径——认识Unity编辑器界面
当Unity编辑器首次打开时,你可能会感到有些不知所措。别担心,我们将一个部分一个部分地拆解它。一个标准的布局通常包含以下窗口:
2.1 场景视图(Scene View) - 你的沙盒
这是你构建游戏世界的核心区域,是你的数字沙盒。在这里,你可以放置、移动、旋转和缩放游戏中的对象,直观地搭建你的关卡和场景。
- 导航操作(必须肌肉记忆):
- 移动视口:按住鼠标中键并拖动。
- 缩放视口:滚动鼠标滚轮。
- 旋转视口:按住Alt键 + 鼠标左键并拖动。(在2D模式下较少使用)
- 平移视口:按住Alt键 + 鼠标中键并拖动。
- 2D模式按钮:在Scene视图的左上角,有一个名为“2D”的按钮。确保它处于按下状态。这会强制将视角锁定在2D的X/Y轴上,使所有操作都像是在一个平面上进行,防止误操作导致视角歪斜。
2.2 游戏视图(Game View) - 玩家的屏幕
这是从游戏主摄像机所看到的画面,也就是玩家最终会看到的游戏内容。你可以把它理解为“预览窗口”。点击顶部的“播放”按钮(三角形)后,游戏视图将成为焦点,你可以在其中测试游戏逻辑。
2.3 层级窗口(Hierarchy Window) - 世界的清单
这里列出了当前场景(Scene)中存在的每一个游戏对象(GameObject)。它可以被理解为你场景的“目录”或“清单”。
- 你创建、删除或选择的对象都会在这里显示。
- 对象之间可以存在父子关系。将一个对象拖到另一个对象上,即可建立父子关系。子对象会继承父对象的移动、旋转和缩放。这是组织复杂场景(如将一个角色的所有部件组成一个整体)的基石概念。
2.4 项目窗口(Project Window) - 你的资源库
这里显示了你项目Assets文件夹下的所有内容,是你所有游戏资源(称为“资产”)的大本营:图片、声音、脚本、预制体、场景文件等都存放在这里。
- 它直接对应你项目文件夹在磁盘上的结构。强烈建议在这里建立良好的文件夹结构来管理你的资产(例如:
Scripts,Sprites,Prefabs,Scenes,Audio等)。
2.5 检视窗口(Inspector Window) - 对象的属性面板
这是你与游戏对象“对话”的地方。当你选中 Hierarchy 或 Scene 视图中的任何一个对象时,Inspector 窗口会显示该对象的所有详细信息。
- 组件(Component):Inspector 中显示的内容,本质上是一个个组件。这是Unity架构的核心!
- 每个游戏对象默认都有一个Transform(变换) 组件。它决定了对象在场景中的Position(位置)、Rotation(旋转) 和Scale(缩放)。
- 你可以通过点击下方的“Add Component”按钮,为对象添加各种功能组件,如物理效果、渲染 sprite、播放声音等。在Unity中,一切都是游戏对象,而对象的功能由附加的组件决定。
2.6 工具栏(Toolbar) - 你的常用工具
位于最顶部,包含最常用的工具。
- 变换工具:用于在Scene视图中操作对象的手柄(移动、旋转、缩放、矩形变换等)。
- 播放/暂停/逐帧按钮:用于测试游戏。
- 账户、服务、图层、布局下拉菜单:用于管理账号、云服务、对象图层和编辑器界面布局(你可以自定义并保存自己喜欢的布局)。
第三章:核心概念——游戏对象与组件
这是Unity中最重要、最必须理解的概念。让我们用一个类比来彻底搞懂它。
想象你要在舞台上拍一部话剧:
- 游戏对象(GameObject):就像是舞台上的一个空演员。他本身看不见摸不着,没有特定功能。他可以扮演英雄,也可以扮演一棵树。这个“空演员”就是GameObject,它是所有事物的容器。
- 组件(Component):就像是给这个空演员穿上的戏服和道具,以及给他的指令。
- 给他穿上英雄的衣服(Sprite Renderer组件),观众就能看到他是一个英雄。
- 给他一把剑(模型),他手里就有了剑。
- 给他一份剧本(脚本组件),他就知道该如何移动、说话和战斗。
- 给他一个碰撞体(Collider组件),他就有了物理体积,不会从舞台上掉下去。
因此,在Unity中:
- 一个GameObject本身什么都不是。
- 是附加在上面的Component赋予了它身份、外观和行为。
- Transform组件是一个GameObject最基础的“属性”,决定了它在世界中的存在状态。
你可以随时通过 Inspector 窗口下的 “Add Component” 按钮,为选中的GameObject添加新的功能。
第四章:实践出真知——创建你的第一个动态场景
现在,让我们运用以上知识,亲手创建一个简单的场景。我们的目标是:一个深空背景,一颗行星,一艘玩家控制的飞船。
4.1 导入资源与设置文件夹
- 首先,我们需要一些图片素材(Sprites)。你可以在Kenney.nl等网站找到免费的2D素材,或者自己用画图工具简单画几个形状。
所需素材:一张星空背景图(background.png)、一张行星图(planet.png)、一张飞船图(ship.png)。确保它们都是带有透明通道的PNG格式。 - 在 Project窗口 中,右键点击
Assets文件夹 ->Create -> Folder。创建一个名为Art的文件夹来存放我们的图片。良好的习惯从这里开始! - 将你的三张图片文件从电脑磁盘直接拖入Unity的Project窗口的
Art文件夹中。Unity会自动导入它们并生成对应的资源。
4.2 创建背景
- 在 Hierarchy窗口 中右键 ->
2D Object -> Sprite。这会在场景中创建一个带有Sprite Renderer组件的GameObject。 - 在 Inspector 中,将它重命名为
Background。 - 选中这个
Background对象,在Inspector中找到 Sprite Renderer 组件。点击Sprite属性旁边的小圆圈图标,在弹出的选择窗口中,选择你导入的background图片。 - 现在背景可能大小不对。选择工具栏上的缩放工具(或按
R键),在Scene视图中拖动控制柄将其放大,直至填满整个视图。你也可以直接在Inspector的Transform组件中修改Scale的X和Y值(例如改为10, 10, 1)。
4.3 添加行星
- 同样地,在Hierarchy中右键 ->
2D Object -> Sprite,创建一个新的Sprite对象。 - 重命名为
Planet。 - 在它的Sprite Renderer组件中,分配
planet图片。 - 使用移动工具(按W键) 和缩放工具(按R键),在Scene视图中将它移动到背景的左侧,并调整到一个合适的大小。
4.4 创建玩家飞船并让其动起来
现在我们来创建最有趣的部分——玩家飞船。
- 创建第三个Sprite对象,重命名为
PlayerShip,并分配ship图片。将它放在屏幕中间偏下的位置。 - 编写第一个脚本! 在Project窗口中,右键点击
Assets文件夹 ->Create -> Folder,创建一个名为Scripts的文件夹。保持组织性! - 在
Scripts文件夹中右键 ->Create -> C# Script。将其命名为PlayerMovement。 - 双击这个脚本文件,它会在Visual Studio中打开。
你会看到Unity已经为你生成了一些基础代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
public class PlayerMovement : MonoBehaviour这行代码定义了一个类,它继承自MonoBehaviour。所有挂载到GameObject上的脚本都必须是MonoBehaviour的子类。Start()函数:只在游戏对象被创建时的第一帧之前调用一次。用于初始化。Update()函数:每一帧都会被调用。游戏逻辑,尤其是需要持续监测的输入和移动,基本都写在这里。
让我们修改代码,让飞船可以用键盘左右移动:
public class PlayerMovement : MonoBehaviour
{
// 这是一个公共变量,用于控制移动速度
public float moveSpeed = 5f;
// Update is called once per frame
void Update()
{
// 1. 获取玩家输入
// Input.GetAxis("Horizontal") 会返回一个-1(左)到1(右)之间的值,0表示没有输入
float horizontalInput = Input.GetAxis("Horizontal");
// 2. 计算移动方向
// 我们只想在X轴上移动,所以Y和Z轴设为0
Vector3 movement = new Vector3(horizontalInput, 0f, 0f);
// 3. 根据时间和速度应用移动
// Time.deltaTime是上一帧到当前帧的时间间隔,使其移动与帧率无关,更加平滑
transform.Translate(movement * moveSpeed * Time.deltaTime);
}
}
- 保存脚本(Ctrl+S),切换回Unity编辑器。Unity会自动编译脚本。
- 将脚本附加到游戏对象上:在Hierarchy中选中
PlayerShip对象,然后将Project窗口中的PlayerMovement脚本拖拽到Inspector窗口中PlayerShip的组件列表里。你也可以点击Inspector最下方的Add Component,搜索PlayerMovement并添加。
恭喜!你刚刚为你的游戏对象添加了第一个自定义行为!
- 测试游戏:点击顶部工具栏的播放按钮(三角形)。现在,试着按下键盘的A/D键或左右方向键,你的飞船应该会在屏幕底部左右移动了!
- 再次点击播放按钮停止测试。
4.5 完善场景:添加摄像机边界
你会发现飞船可以无限地移出屏幕。我们需要限制它的移动范围。我们将通过脚本获取主摄像机的边界信息来实现。
修改PlayerMovement脚本:
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
// 添加一个变量来控制玩家在X轴上的移动限制
public float horizontalLimit = 8f;
void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
Vector3 movement = new Vector3(horizontalInput, 0f, 0f);
transform.Translate(movement * moveSpeed * Time.deltaTime);
// 限制玩家的X位置,不让其超出屏幕边界
// Mathf.Clamp函数将值限制在min和max之间
Vector3 currentPosition = transform.position;
currentPosition.x = Mathf.Clamp(currentPosition.x, -horizontalLimit, horizontalLimit);
transform.position = currentPosition;
}
}
保存脚本,回到Unity。PlayerMovement组件现在多了一个Horizontal Limit的滑块字段。你可以直接在Inspector中调整这个值(比如设为8),直到飞船移动到你觉得合适的屏幕边缘为止。在Inspector中修改公共变量的值,是调试和配置参数最常用的方法。
第五章:总结与展望
你已经完成了什么?
在这一篇超长的入门指南中,你完成了从零到一的巨大跨越:
- 搭建了Unity开发环境。
- 熟悉了编辑器的核心界面(Scene, Game, Hierarchy, Project, Inspector)。
- 理解了Unity最核心的概念:GameObject 和 Component。
- 学会了导入资源和管理项目结构。
- 编写并附加了你的第一个C#脚本,实现了玩家输入和控制。
- 创建了一个简单的动态场景。
这些知识是万丈高楼的基石。你可能已经注意到,我们甚至还没有提到“物理”、“碰撞”、“动画”这些词。别急,这些将在下一篇中隆重登场。
下一篇预告:《第二阶段:核心机制入门 - 让世界拥有物理法则》
在下一篇文章中,我们将:
- 为我们的飞船添加发射子弹的功能。
- 引入Unity的2D物理系统(刚体Rigidbody2D、碰撞体Collider2D)。
- 学习如何检测碰撞,当子弹击中行星时,让行星消失。
- 最终完成一个简单的交互式小游戏。
练习与思考:
- 尝试在场景中添加更多行星或星星作为装饰。
- 试着修改
PlayerMovement脚本中的moveSpeed公共变量,感受它在游戏运行时的变化。 - 探索一下,如何让飞船也能进行上下移动?(提示:使用
Input.GetAxis("Vertical"))
记住,探索和犯错是学习过程的一部分。不要害怕尝试,不要害怕看到红色的报错信息——解决它们,就是你成长的时刻。
欢迎来到Unity的世界,创造之旅,现在正式开始!

被折叠的 条评论
为什么被折叠?



