讲解Unity概述

2015年03月17日 11:06 0 点赞 0 评论 更新于 2025-11-21 17:27

Unity是什么

读者首先需要明确,Unity是一款工具软件,截至本书成书时,已推出5.0版本。它是一款优秀的3D游戏引擎,对底层图形接口进行了封装,这为开发者节省了大量精力,显著缩短了传统游戏开发的周期,降低了人力成本。

需要注意的是,Unity并非一门编程语言。它提供了图形化编辑工具和编译器。在本书中,我们将图形化编辑工具称为狭义的Unity,而编译器则直接称为IDE。

Unity的跨平台特性

但凡涉及Unity的书籍,都会提及它的跨平台特性。既然这是一个常见话题,读者可以自行利用网络资源深入了解。简单来说,Unity强大的跨平台特性使我们能够先在某个平台推出测试版,然后快速将其扩展到所有支持的平台。

Unity支持的编程语言

狭义上讲,Unity直接支持三种脚本语言来编写游戏脚本,分别是C#、Javascript和Boo。由于后两种语言的语法较为复杂,C#成为了更广泛使用的语言。

广义上讲,Unity还支持用于编写Shader的ShaderLab语言,以及GPU编程语言CG。此外,由于Unity支持导入dll文件,因此可以使用更多语言编写dll,供脚本调用。

快速认识Unity世界

安装好Unity后,在可视化编辑器中会看到一个已生成的场景和主摄像机。下面我们将前瞻性地介绍场景、主摄像机以及具象的游戏内容,部分相关知识将在下一章节“Unity的预备知识体系”中详细讲解。

场景与摄像机

一个Unity工程由多个场景(Scene)组成,每个场景可以包含多个摄像机(Camera)和多个游戏体。多个摄像机通过深度(Depth)来区分,深度最浅的摄像机为主摄像机,且一个场景中只有一个主摄像机。不同深度的摄像机就像从不同视角观察场景,最终游戏画面是根据各个摄像机的深度优先组合展示的。例如,在很多游戏中,游戏画面上会有一个半透明的小地图,这实际上是两个摄像机的组合:一个摄像机从主角身后跟随观察场景,另一个摄像机从主角正上方俯视场景,并将场景中的特殊元素抽象为点进行描绘。

游戏体与GameObject

多个游戏体之间的关系十分复杂。在Hierarchy视图中,我们可以组织游戏体之间的树形关系,还可以通过游戏脚本(组件)为游戏体添加隐形联系,也有内置组件(如关节组件)为游戏体构建内在关联。

在所有Unity项目中,最基本的单元是GameObject,即游戏对象。即使不进行游戏开发,我们操作的也是各种各样的GameObject。一个工程由场景、摄像机、游戏体和脚本(组件)组成,但场景和脚本不属于游戏对象。场景比较特殊,但容易理解;摄像机是一种特殊的游戏对象,它没有外观,作用是为用户观察场景提供视角。在Unity中,如果两个摄像机相对且没有其他游戏体,那么画面将为空。

除了摄像机,还有一种没有外观的游戏对象,即空游戏对象(Empty Object),后续我们会灵活运用它。

在学习Unity时,必须牢记一点:任何代码都必须依附于一个GameObject才能被游戏引擎调用执行。这一点在学习之初就要牢记,避免编写大量代码后运行却无反应,浪费时间查找问题。在其他程序开发中,通常有入口的概念,而在Unity中,代码的入口就是GameObject,代码通过依附于GameObject被引擎执行,这与一般的代码编写和执行方式有所不同。

组件——component

前面提到脚本时,我们用括号标注了组件。实际上,脚本就是一种组件,在本书中,组件和脚本的概念相同。

一个游戏对象如果没有组件,就没有任何外观和属性,在Unity中不存在这样的情况,因为任何对象都有一个无法删除的组件——Transform组件。最简单的空游戏对象(Empty GameObject)仅由一个Transform组件构成。因此,我们可以将游戏对象(GameObject)看作是容纳组件的容器。

重要组件——Transform

当创建一个游戏对象(GameObject)时,必然会出现且唯一且无法删除的内置组件就是Transform组件。它反映了游戏对象的坐标、旋转度和缩放程度。

由于Unity是3D游戏开发引擎,Transform组件的三个属性都有三个维度。在Unity中,我们需要经常以向量的思维来思考,因为其中标量较少,大部分常量和变量要么是矩阵,要么是向量。例如,颜色就是一个4元向量,其中RGB分别对应红绿蓝三个分量,第4元是不透明度Alpha。

Transform组件由三个向量构成,分别是坐标向量Position、旋转向量Rotation和缩放向量Size。关于这三个向量的特性,我们将在空间矩阵变换时进行更深入的讨论。

关于维度、向量、坐标系的内容,将在下一章节《Unity预备知识体系》中详细介绍,读者也可以提前查阅相关资料。

其他重要组件

除了Transform组件,Unity还有很多内置组件,下面介绍两个相对重要的组件:

形状组件MeshRenderer与材料组件Material

形状组件也称为网格组件。在计算机中,三维图形是由一个个三角形拼接而成的,就像鸟巢的房顶,因此被称为网格。在3D建模软件中也是如此。Unity内置的形状有限,如球体、立方体、圆柱体、胶囊体等。在游戏开发中,需要的形状通常很多且复杂,这些形状将由游戏美工使用3DMAX/Maya等软件制作成模型文件,我们只需导入即可创建复杂的3D形状。

材料通常模拟现实世界中物体表面的颜色信息。例如,玻璃近乎无色且透明,金属有特殊光泽,皮球表面凹凸不平,镜子可以反射光线。不同的游戏对象需要设置合适的Material组件,这是狭义的材料,我们称之为外观材料。

在Unity游戏开发中,模拟的世界不仅要有视觉效果,还需要符合物理规律。因此,Unity中的材料除了外观材料,还有物理材料,它用于表达物体的密度、质量、弹性系数等肉眼无法观察到的物理属性,后续我们将详细介绍。

材料的灵魂——Shader着色器

Shader着色器为外观材料提供了一种数学计算方式,用于告诉计算机如何模拟不同材料的视觉效果。在初学阶段,我们只需学会使用几种基本的内置shader,如漫反射Diffuse、镜面反射Specular、视差漫反射与镜面反射Parallax Diffuse/Specular。

图形、动画与游戏的区别和联系

在义务教育的数学课程中,我们学过“点动成线,线动成面,面动成体”,这实际上表达了低维度的图元沿更高维度的轴线运动形成高维度图元的原理。

动画最初是通过连续翻动一页页画实现的,由于视觉停留现象,让人感觉画面在连续运动。简单来说,图形沿着时间维度运动就形成了动画。

而动画加上用户操作的控制,才能成为最简单的游戏。例如,在贪吃蛇游戏中,如果没有方向键输入,蛇就像在播放动画片一样前进;当用户输入上下左右方向键,程序改变蛇的前进方向,使其避开障碍物、墙壁和自己的身体,并朝食物前进,这样才能称之为游戏。当然,复杂的游戏还有很多动画所没有的特性。

作者信息

menghao

menghao

共发布了 3994 篇文章