第一章 Unity 下载、安装、激活
1.1、Unity 介绍
Unity 是一款由 Unity Technologies 研发的跨平台 2D / 3D 游戏引擎,可用于开发 Windows、MacOS 及 Linux 平台的单机游戏,PlayStation、XBox、Wii、3DS 和 任天堂Switch 等游戏主机平台的视频游戏,或是 iOS、Android 等移动设备的游戏。
Unity 所支持的游戏平台还延伸到了基于 WebGL 技术的 HTML5 网页平台,以及 tvOS、Oculus Rift、ARKit 等新一代多媒体平台。除可以用于研发电子游戏之外,Unity 还是被广泛用于建筑可视化、实时三维动画等类型互动内容的综合型创作工具。
Unity Hub 是一种管理工具,可用于管理您的所有 Unity 项目和安装。使用 Hub 可以管理 Unity Editor 的多个安装及其关联组件,创建新项目,以及打开现有项目。
[ps] 建议通过 Unity Hub 安装和管理 Unity
1.2、Unity Hub 下载、安装
1.2.1、下载 Unity Hub
地址: Unity官方下载_Unity最新版_从Unity Hub下载安装 | Unity中国官网
1、下载对应版本
2、在弹出的登录框中可选择微信登录
1.2.2、安装 Unity Hub
1、选择安装目录
2、激活新许可证
打开 Unity Hub,点击 偏好设置->许可证->添加->获取免费的个人版许可证
注意: 个人版几天就到期了,到时候重新激活就行了
1.3、安装 Unity
1、在 Unity Hub 主界面点击[安装编辑器],选择安装长期支持版
2、安装 Unity 配套模块
- 开发工具: 由于在 Unity 中开发游戏需要使用 c# 语言,所以需要安装 MVS(建议不勾选,自己下载)
- 平台: 将来想要把游戏发布到哪些平台(如果只是想学习,建议不勾选任何平台,有需要时再安装)
注意: 安装过程很缓慢,大概 40min,请耐心等待
第二章 Unity 使用
2.1、软件界面介绍
2.1.1、Unity 界面: 官方文档
地址: Unity 的界面 - Unity 手册 (unity3d.com)
2.1.2、界面总体介绍
Unity 软件界面由 9 大部分组成: 2 + 3 + 4
1、2 个视图
- Scene 视图: 编辑场景的地方,场景可以先简单认为是游戏中的每个关卡,基本上游戏中能看到的所有元素,都包含在场景,可以通过 scene 视图来编辑、操作
- Game 视图: 游戏最终执行效果展示位置
2、3 个窗口
unity 和很多功能强大的可视化窗口软件一样,每一组相关功能都会被设计制作为一个窗口,用户可以通过这个窗口来操作这一系列功能。
unity 菜单栏 window 中,包含了 Unity 中可以使用的功能窗口,在此,先介绍其中最重要的 3 个
- project 窗口: 资源库。当前项目的所有资源,包括 Assets(项目本身资源)和 Packages(运行项目所需资源)
- Hierachy 窗口: [ˈhaɪərɑːrki] 层级窗口 。游戏对象按层次展示在该窗口中,可以快速定位我们要操作的对象,并清晰展示对象间关系
- Inspector 窗口: 检查窗口,也可以称为属性窗口。可以查看并配置选中对象的各个属性,选中的对象不同,布局和内容也不同
3、4 个栏位
基本上每个 windows 标准视窗应用都包含的标准布局位置
- 标题栏:标题(图标-项目名称-项目默认打包方式-unity 版本号-使用的可视化 api)和控制按钮(最小化-窗口/全屏-关闭)
- 菜单栏:可以找到所有功能的地方
- 工具栏:常用的基本操作
- 状态栏:unity 信息反馈
2.1.3、布局
除去 4 个栏位不能拖动,unity 中的 2 个视图区域 + 3 个窗口,以及其他的一些窗口,都可以自由布局,可根据自己的使用习惯,设置不同的布局,并且存储下来,随时可以还原。
2.2、Scene 视图
Scene 视图是正在创建的世界的交互式视图。Scene 视图可用于选择和定位景物、角色、摄像机、光源和所有其他类型的游戏对象。在 Scene 视图中选择、操作和修改游戏对象是开始使用 Unity 必须掌握的一些必要技能。
本节将详细介绍以下内容:
- 如何在 Scene 中移动,找到合适的操作视角
- 如何在 Scene 中选择游戏对象
- 如何在 Scene 中操作游戏对象位置设定与变换设定
- Scene 视图控制栏
- Scene 视图摄像机
- Gizmos 菜单
2.2.1、在 Scene 中移动
1、坐标工具
Unity 坐标系统
3D 坐标系是 3D 游戏开发与 VR 开发中的基础概念。一般而言 3D 坐标系都是使用的笛卡尔坐标系来描述物体的坐标信息,笛卡尔坐标系:分为左手坐标系与右手坐标系
Unity 中使用的是左手坐标系,X 轴代表水平方向 horizontal, Y 轴代表垂直方向 vertical ,Z 轴代表深度。Vector3(x,y,z)
Unity 中坐标系分类:
- word Space(世界坐标系): 用来描述游戏场景内所有物体位置和方向的基准,Unity 场景中创建的物体都是以全局坐标系中的坐标原点(0,0,0)来确定各自的位置。
- local Space(局部坐标系): 是相对于父物体来说也就是当两个游戏对象互为父子关系,那么子物体会以父物体的坐标点为自身的坐标原点。如果游戏对象没有父物体,那么会以这个世界的 0,0 为自身的坐标原点。
- Screen Space(屏幕坐标系): 以像素为单位,左下角是(0,0),右上角为(screen.width, screen.height),Z 的位置是以相机的世界单位来衡量及物体离相机远近。
- viewport(视口坐标): 视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z 的位置是以相机的世界单位来衡量的。
- GUI 界面的坐标系: 这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
Scene 视图坐标工具
需要先打开 3D 视图,在 scene 视图右上角,可以快速调整视角
单击任何锥形轴臂会将 Scene 视图摄像机对齐到该锥形轴臂所代表的轴(例如:顶视图、左视图和前视图)。还可以右键单击该立方体来显示一个包含视角列表的菜单。要返回默认视角,请右键单击场景视图辅助图标,然后单击 Free。
技巧: Shift 键并单击场景视图辅助图标中心的立方体,即可返回透视图,使用从侧面和略微从上方观察的角度查看场景。
2、导航工具
方向键: 用方向键(上下左右)在场景中移动,同时按住 shift 可加速
手型工具(Q) + 鼠标:
- 移动: 选中后,鼠标左键单击并拖动;
- 旋转: alt/option,左键单击并拖动围绕当前轴心点旋转视角;2d 模式不可用
- 缩放: alt/option,右键单击并拖动可缩放
按住鼠标右键进入”飞跃模式”: 使用 WASD 键向左/向右/向前/向后移动,使用 Q 和 E 键向上和向下移动。按住 Shift 键可以加快移动速度。
聚焦指定对象: 选中对象后,点 F;要将视图锁定到游戏对象(即使游戏对象正在移动),请按 Shift+F。
另外一些快捷键:
2.2.2、选择游戏对象(Game Object)
复杂的场景中,可能有成千上万个游戏对象,如何快速选中想要的游戏对象也是一门技术
Unity 会在 Scene 视图中突出显示选择的游戏对象及其子项。默认情况下,选择轮廓颜色为橙色,子项轮廓颜色为蓝色。还可以选择以其它颜色突出显示所选游戏对象的线框(Unity 设置中可以更改)。
1、选中 Game Object
单选
- 在 Scene 视图中单击游戏对象。如果反复单击重叠的游戏对象之间的共享空间,选择将在这些游戏对象之间循环;
- 在 Hierarchy 窗口中单击游戏对象的名称(推荐优先使用)
多选
- 鼠标拖拽矩形框
- shift + 鼠标左键单击;Ctrl/Command 在选择范围内添加或删除游戏对象。
2、设置是否允许选中
在 Hierarchy 中,点击游戏对象“拾取”标记,来控制该对象的可选性
- 鼠标左键单击“拾取标记”: 该对象和其子对象
- Alt+鼠标左键单击“拾取标记”: 仅仅影响对象本身,不影响子对象
注意:
在 Hierarchy 窗口中进行的所有场景拾取更改都是持久有效的。每当使用 Select All 或 Deselect All、关闭然后重新打开场景或进行其他操作时,Unity 都会重新应用这些更改。
2.2.3、游戏对象定位和变形
1、游戏对象的定位(移动)和变换(变形)
游戏对象的移动和变换,是通过 Scene 视图左侧的五个工具来实现的
移动:
选中移动工具(w)
- 沿坐标轴移动: 按着坐标轴移动
- 沿平面移动: 按着方块移动
- 沿 Scene Camera 所面向的平面移动: 按着 shift,移动方块
旋转:
选择旋转工具(e)后,通过单击并拖动围绕游戏对象显示的线框球体辅助图标的轴来更改游戏对象的旋转。(红色表示 x 轴,绿色表示 y 轴,蓝色表示 z 轴);使用最外面的圆圈围绕 Scene 视图 z 轴旋转游戏对象。可将此行为视为在屏幕空间中旋转。缩放:
使用缩放工具(r),可通过单击并拖动辅助图标中心的立方体,在所有轴上均匀地重新缩放游戏对象。也可以单独缩放每个轴,但如果在有子游戏对象的情况下执行此操作,则应该注意,因为效果看起来会很奇怪。矩形变换: 前三个工具组合,一般用于 2d 对象
变换: 前三个工具的组合,一般用于 3d 对象
2、辅助图标控制柄 位置开关
位置
单击左侧的 Pivot/Center 按钮可在 Pivot 和 Center 之间切换。
- Pivot [ˈpɪvət] (枢 shu 轴 ) 将辅助图标定位在游戏对象的实际轴心点(由变换组件进行定义)。
- Center 将辅助图标定位在中心位置(根据所选游戏对象)。
概念说明:
- Pivot: 该游戏对象(不包括子对象)的中心。
- Center: 该游戏对象(包括子对象)的中心。 center 就是你那个模型,或者多个模型联合起来的外接盒的几何中心。
旋转
单击右侧的 Local/Global 按钮可在 Local 和 Global 之间切换。
- Local 保持辅助图标相对于游戏对象的旋转。
- Global 将辅助图标固定在世界空间方向。
概念说明:
- Local: 相对于父对象的坐标(相对位置)
- Global: 在 scene 中的真实坐标(实际位置)
2.2.4、Scene 视图工具栏(控制栏)
官方文档: Scene view View Options toolbar - Unity 手册 (unity3d.com)
使用 Scene 视图控制栏可以选择用于查看场景的各种选项,还可以控制是否启用光照和音频。这些控件仅在开发期间影响 Scene 视图(视觉辅助),对构建的游戏没有影响。
说白了就是视觉辅助,更方便我们清晰的看到我们想要了解的东西,并不做实质改变
1、绘制模式(Draw mode)下拉菜单
右边第一个下拉菜单选择要用于描绘场景的绘制模式。可用选项为:
2、2D/3D、Lighting 和 Audio 开关
- 2D: 切换 2D / 3D 视图
- Lighting: 打开或关闭 scene 光照(光源、对象着色等)
- Audio: 打开或关闭声音
3、Effects 按钮和菜单
启用或禁用渲染效果
- Skybox: 在场景的背景中渲染的天空盒纹理
- Fog: 视图随着与摄像机之间的距离变远而逐渐消褪到单调颜色
- Flares: 光源上的镜头光晕
- Always Refresh: 定义动画元素是否播放动画。当选中,基于时间的特效会播放动画。比如场景特效(像地面上的草,随风摇摆)
- Post Processing: 后期处理特效是否显示
- Particle Systems: 粒子系统特效是否显示
4、场景可见性开关
场景可见性开关可打开和关闭游戏对象场景可见性。在打开时,Unity 将应用场景可见性设置。关闭时,Unity 将忽略这些设置。此开关还显示场景中隐藏的游戏对象数量。
5、Scene 视图摄像机设置
Scene Camera 和普通 Camera 的区别
简单来说,Scene Camera 是开发者视角,Camera 游戏对象是玩家视角
- Scene Camera: 开发者使用 Unity 操作 Scene 视图时所看到的视角
- 普通 Camera: 指 unity 中的摄像机游戏对象,是专门添加到 Scene 中,玩家在游戏中查看游戏世界时用到的视角
Scene Camera 设置
摄像机设置菜单包含用于配置 Scene 视图摄像机的选项。这些调整不会影响带有摄像机组件的游戏对象上的设置。
说白了,就是这个菜单只用来设置 scene camera ,跟游戏中普通的游戏对象 camera 无关
2.2.5、Gizmos 菜单
Gizmos 菜单包含用于控制对象、图标和辅助图标的显示方式的许多选项。此菜单在 Scene 视图和 Game 视图中均可用。
2.2.6、场景可见性
可见性控件可用于在 Scene 视图中快速隐藏和显示游戏对象,而无需更改它们在游戏中的可见性。这可用于处理难以查看和选择特定游戏对象的大型或复杂场景。
操作方式和“拾取”控件完全一样
2.3、Game 视图、 Hierarchy、Project、Inspector 窗口
2.3.1、Game 视图
1、Game 运行控制按钮
- 运行游戏(ctrl+p)
- 暂停(ctrl+shift+p)
- 按帧运行(ctrl+alt+p)
注意: 在运行模式下,所做的任何更改都是暂时的,在退出运行模式后将会重置。
2、Game 视图控制栏
2.3.2、Hierarchy 窗口
场景中游戏对象的管理器(选择器)
Hierarchy 窗口显示场景中的每个游戏对象,如模型、摄像机或预制件。可以使用 Hierarchy 窗口对场景中使用的游戏对象进行排序和分组。在 Scene 视图中添加或移除游戏对象时,也会从 Hierarchy 窗口添加或移除它们。
主要功能:
父子包含关系:
将游戏对象链接在一起以帮助移动、缩放或变换游戏对象的集合。移动顶层对象或父游戏对象时,也会移动所有子游戏对象。
管理游戏对象:
- 创建、复制粘贴、选取、删除
- 更改嵌套关系
- 是否可选,是否可见
- 排序
多场景编辑
注意: Hierarchy 窗口中,虽然允许编辑多个场景,但根节点通常都是场景对象(scene),其他的游戏对象都包含在某个场景中。
2.3.3、Project 窗口
Project 窗口显示与项目相关的所有文件,该窗口是在应用程序中导航和查找资源以及其他项目文件的主要方法。
1、Project 工具栏
Project 常用操作工具按钮栏
2、资源管理区域
左侧树状目录:
- Assets: 资源文件
- Packages: 库文件(运行游戏所需要的程序库)
右侧文件操作区域:
如同 windows 中的文件操作方式一样
2.3.4、Inspector 窗口
被选中游戏对象的属性窗口,可以在其中查看、编辑属性
使用 Inspector 窗口可对 Unity 编辑器中几乎所有内容(包括游戏对象、Unity 组件、资源、材质)查看和编辑属性和设置,以及查看和编辑编辑器内的设置和首选项。
选择相同类型的多个资源时,Inspector 窗口会显示它们共有的所有属性。选择不同类型的多个资源时,Inspector 会显示一个列表,其中显示选择的每种类型资源的数量。单击该列表中的任何项可检查该类型的所有资源。
查找 Inspector 窗口的源:
在 Inspector 窗口中打开游戏对象或资源时,可以使用 Ping 命令在 Scene 视图或 Project 视图中查找它。
从 Inspector 窗口的 More Items (⋮) 菜单,选择 Ping。Unity 在 Hierarchy 视图或 Project 视图中突出显示该项目。
第三章 使用 Playground 创作第一个游戏
Unity Playground 提供了一系列易于使用和整合的单任务组件,因此不要求具有编码技能。通过将这些组件整合在一起,便可以创作出多种游戏风格的 2D 物理游戏。还可以使用 Playground 来了解游戏设计或关卡设计。
3.1、创建项目
3.1.1、在 Unity Hub 中创建新项目
注意:
1、编辑器版本选择 2020 版的,如果没有请下载并安装(因为 Unity Playground 在 2020 年停止更新了,所以使用新版本编辑器会出现无法导入的问题)
2、模板选择 2D 核心模板
3、项目名随便起,项目位置选择自己要存放的位置
3.1.2、使用 Unity Asset Store 下载 Unity Playground
Unity Asset Store 官方地址: Unity 资源商店 - 优质3D 2D游戏制作资源平台
1、搜索 unity playground
2、点击右侧按钮 添加至我的资源
3、打开刚才新建的空项目
4、打开 Package Manager (包管理) 窗口(Window->Package Manager),在上面的 Packages: 下拉列表中,选中 My Assets,选中 Unity Playground,点击右下角 download 按钮下载包
5、下载完成后,点击右下角 import 按钮导入包,选择导入所有
注意: 如果导入出现 Deterministic compilation failed. You can disable Deterministic builds in Player Settings
Library\PackageCache\com.unity.multiplayer-hlapi@1.0.4\Editor\Tools\Weaver\AssemblyInfo.cs(22,28): error CS8357: The specified version string contains wildcards, which are not compatible with determinism. Either remove wildcards from the version string, or disable determinism for this compilation请参考 https://blog.csdn.net/weixin_44042453/article/details/126176878
3.2、制作第一个游戏: 飞船躲陨石
3.2.1、创建玩家
1、打开项目
2、创建新场景:
Project 窗口 –> Assets/Scenes 文件夹,右键 Create–>Scene ,创建只带有一个 Camera 对象的场景,重命名为 PlaneAsteroid
3、添加玩家飞船:
- Project 窗口 –> Assets/Images/SpaceShips/ 拖拽其中一个飞船到 Hierarchy 中,让飞船对象成为 PlaneAsteroid Scene 的子对象;
- 选中飞船,在 Inspector 窗口中,将对象命名为 Ship ,并将 Tag 选中为 Player。
注意:
尽可能拖拽素材到 Hierarchy 中,可以直接确定对象间父子关系;当然,如果为了定位方便,将素材拖拽到 Scene 中也可以,但记住要调整对象嵌套关系
4、调整飞船大小:
在 Hierarchy 窗口中选中 Ship 游戏对象,在右侧 Inspector 窗口中可调整飞船大小
5、让飞船动起来:
- 选中 Ship 游戏对象后,在 Inspector 窗口下方点击 Add Component,搜索 Move with Arrows,将脚本 Move with Arrows 绑定到飞船游戏对象上。
- 当你添加了 Move 脚本,还会自动添加一个 Rigidbody2D 组件。这是因为 Move 需要 Rigidbody2D 才能起作用。
- 调整 Gizmos 中的脚本图标大小,将其缩小: 使用 Scene 视图中的下拉表单辅助图标进行缩小,将 3D Icons 滑动条向左拖动,直到图标大小合适。
相关概念:
- tag(标签): 利用标签,我们可以将对象分为几类,以便脚本仅在碰触到正确的对象时才能执行操作。没有标签,就无法区分对象。可以在项目配置中,增减标签
- script(脚本): Unity 中的游戏代码
- sprite(精灵): Unity 中的 2D 游戏对象素材
3.2.2、调整物理值
RigidBody2D 组件和 Move 脚本组件上,暴露出很多物理引擎相关的参数值,通过调整,可以改善游戏体验
- 在 RigidBody2D 组件上,我们要将 Gravity 修改为 0
- Orient to direction: 船头朝向移动方向,勾选
- Friction: 摩擦力,设置为 5 可以消除漂移
- Speed: 更改速度,设置为 3 即可
- Mass :质量,影响惯性
注意:
如果在运行模式下编辑组件值,则在游戏停止后,你所做的更改将丢失。切记要在非运行模式下进行更改!仅当测试某些即使丢失也没关系的临时值时,才应该在运行模式下进行更改。
相关概念:
物理引擎:
Unity 中,包含了完整的物理引擎,可以让开发者非常方便地模拟显示中的物理现象,比如:质量、惯性、重力、速度、加速度、碰撞、反弹等等。官方文档: https://docs.unity3d.com/cn/2021.1/Manual/PhysicsSection.html
RigidBody(刚体):
是实现游戏对象的物理行为的主要组件。如果想让一个游戏对像能被物理引擎所影响,就必须为其添加 RigidBody 组件,分为 2D 和 3D,分别针对不同的游戏类型。刚体可以接受力和扭矩(通过脚本编写代码来实现),向刚体施加力/扭矩实际上会改变对象的变换组件位置和旋转。官方文档: https://docs.unity3d.com/cn/2021.1/Manual/class-Rigidbody2D.html
3.2.3、添加障碍物和碰撞
1、添加陨石
2、添加两个组件到陨石: Rigidbody2D 和 PolygonCollider2D
3、添加 PolygonCollider2D 给飞船: 必须都有该组件,才能正常碰撞
4、设置陨石重力为 0
5、调整陨石参数: Angular Friction 为旋转阻力
注意: 我们将 Mass 参数设置的大一些,比如 10,这样便会增加陨石的重量,在碰到飞船时才不至于快速飞出边界。
6、碰撞后掉血: 向陨石添加一个名为 ModifyHealth 的脚本
7、向飞船添加另外一个名为 HealthSystem 的脚本,这样飞船能够检测到这种伤害
8、在 Project/Assets/Prefabs 中新建一个文件夹,名为: MyPrefabs,通过将陨石拖拽到 Project/Assets/Prefabs/MyPrefabs 中,将其设置为预制件(Prefab);并进行复制(Windows 上的快捷键为 Ctrl+D,Mac 上的快捷键为 Command+D),从而在飞船周围创建一个小的陨石场
相关概念:
- Collider(碰撞体):
官方文档: https://docs.unity3d.com/cn/2021.1/Manual/class-PolygonCollider2D.html
2D 多边形碰撞体,碰撞体的形状由线段组成的自由形状边缘定义,因此可对其进行高精度调整以适应精灵图形的形状。- Prefab(预制件):
官方文档: https://docs.unity3d.com/cn/2021.1/Manual/Prefabs.html
Unity 的预制件系统允许创建、配置和存储游戏对象及其所有组件、属性值和子游戏对象作为可重用资源。预制件资源充当模板,在此模板的基础之上可以在场景中创建新的预制件实例。
即“可重用资源模板”
3.2.4、添加用户界面
通过用户界面(User Interface)给玩家回馈信息
将 UserInterface 预制件从 /Prefabs 文件夹拖入到场景中。在你查看 Game 视图时,系统会自动显示一个 UI 弹出窗口,其中包含 Score 和 Health 属性。
3.2.5、添加游戏目标
游戏规则: 这个游戏的目标是什么呢?假设我们希望飞船收集一些星星,但不能撞到陨石。一旦收集到所有星星,便赢得了比赛。但如果发生碰撞的次数太多,游戏便结束!
1、添加星星:
直接搜索 star 或将这个星星从 /Images 文件夹拖入到场景中。
2、添加分数脚本:
为星星添加 Collectable 脚本,将星星变成一个可收集物品,收集到一个星星便会奖励玩家一个点数。
3、添加碰撞体,让星星能被飞船收集:
为星星添加 PolygonCollider2D 组件,并启用 Is Trigger 属性。
相关概念:
触发器:
用于触发事件。如果启用 Is Trigger 属性,则该碰撞体将用于触发事件,并被物理引擎忽略。 触发后,可以让对象变为无形(比如:被吃掉的金币,被拾取的装备等),Unity 会检测到两个对象相互接触的情况,继而执行设定好的事件(执行事件函数)。
3.2.6、添加获胜条件
完善游戏,添加获胜条件
1、将星星作为预制件,复制 5 个;将这些星星分布到周围,让一些星星很容易获得,但其他一些星星很难获得。通过这样的方式,我们也可以让我们的小游戏难度逐渐增大。
2、选择 UI 游戏对象,然后在 UI 脚本上确保游戏类型为 Score,并且所需得分为 5。
注意:
星星个数需要 大于等于 Score 值,否则永远无法胜利
3.2.7、添加游戏背景
1、将 Project/Images/Backgrounds 文件夹中的 BG_space 拖入到 Hierarchy 中
2、在右侧 Inspector 中 Scale 设置为(5, 5);Draw Mode 设置为 Tiled;Visibility Options 中的 Sorting Layer 设置为 Background
游戏运行效果: https://www.bilibili.com/video/BV1LS4y147di/
——未完待续——
- 本文作者: Jiong Zhang
- 本文链接: https://jzhangCSER01.github.io/2022/08/01/Unity/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!