1.5 从0开始学Unity游戏开发--创建第一个物体

在正式开始写代码之前,我们需要了解基本的Unity开发的工作流,不同于其他教程,我会更加专注于如何实现我们的目的,因此不仅只限于写代码,我们也需要做游戏策划的事情,否则光学习代码是无法理解整个事情的全貌。

给自己一个目标

先给自己设置一个期望实现的内容作为目标,既然我们是初学,我们希望能实现在游戏里面显示一个东西,任何东西都可以,不需要支持任何玩家控制。

创建Scene

虽然我们新建的工程就自动包含了一个Scene,为了我们能了解整个事情的来龙去脉,我们并不使用它。在动手操作之前,我们先要理解Unity对游戏世界的划分。

在游戏开发的过程中,我们的游戏内容可能会越来越多,比如有N个地图,N种玩法等等,朴素的价值观认为这些就需要通过一种概念划分开,好比每个人负责不同的地图的开发,或者说游戏每次只加载一个地图的资源。

基于这样一个观念,Unity内置了游戏场景这样一个概念,场景也就是Scene的翻译,前面说的一个地图可以是一个Scene,一个玩法可以是一个Scene。而对于程序员来说,Scene其实就是一个class,这个class内可以新增一些成员来承载内容,如果是早期的游戏引擎,我们当然可以手写代码来实现这些功能。

我们知道代码里面要新建一个Scene实例,在经典的C++里面就是new一个新的Scene出来,但是从这里开始,Unity的操作会不一样,新建一个Scene靠的是新建一个类型为Scene的资源文件,而资源文件显然是由Project窗口管理,所以我们也是在Project窗口里面右键任意目录,选择Create->Scene

创建Scene类型的资源

我这里直接在Assets目录下创建了,就叫做Demo吧

可以看到我们创建的是真实存在于磁盘上的文件,而这种以资源创建来代替写代码的操作,以后将会充斥在引擎内部,这也是现代引擎工作流的特征之一。

打开Scene

在创建完成后,我们可以直接双击它打开它(当然是在引擎的Project窗口下双击),然后Unity就会打开它(如果你前面改动了工程默认的Scene的内容没保存,那么打开Demo Scene的时候会提示你要不要保存,随便你怎么选都可以),在Hierarchy窗口中,我们可以看到这个树形节点的根的名字已经变成了Demo,并且图标也跟Scene资源文件的图标很像。

这里就能确认你当前打开的场景是Demo了。

也就是说Hierarchy窗口其实就代表了场景本身的内容。

场景默认自带文件

可以发现,这个Demo下面还有Main Camera,和Directional Light两个东西。

这就是我们遇到的Unity下第一个潜规则,也即是场景创建出来,因为我们选的是3D游戏工程,那么Unity默认认为这两个东西是我们基本上都会需要的,基本上确实也如此。

但是我们先忽略这两个东西的作用,这里只简单说一下引擎内部的潜规则到处都是,开始学习的时候可能会很难受,但是理解了之后就能接受。

在场景中创建第一个东西

还记得我们的目标吗,我们需要创建任何一个可以看到的物体显示出来,在Unity中之所以要创建场景,其原因也是它所有需要显示的内容都是根据你当前显示的场景内包含的物体来处理的。

所以我们需要在Demo场景中创建属于我们自己的物体。

虽然上面说了,我们场景创建出来后默认自带了两个家伙,但是先忽略它们。

跟Project窗口中创建资源工程级的资源类似,如果我们需要在场景中创建属于这个场景的资源的话,那么我们同样需要在某个窗口右键,上面也讲了Hierarchy窗口就是代表了场景本身的内容,那么我们很自然的就需要在Hierarchy窗口内右键,当然你也可以选择任意树形节点上右键,在空白处右键创建的就直接属于根节点的子节点,在某个节点右键创建的就当然属于这个节点的子节点。

我们这里选择在Hierarchy窗口的空白处直接右键,选择3D Object->Cube。你可能会问为啥没有Create?我猜可能是因为这个操作以后要非常频繁的使用,能少一层菜单就能加快一定的开发效率。

创建完成后,其实就能明白,这个Cube确实是真的Cube,在右侧我们也能注意到它显示出来了。

看样子我们本篇文章的任务已经完成了?很显然还有很多问题需要解答。

Scene窗口

前面也说了Hierarchy窗口其实就是我们用来看Scene内部的物体的数据结构的情况,那么Scene窗口则是这些物体渲染出来的画面的效果,这些是实时更新的,也就是说,你在Hierarchy窗口里面增删的操作,会实时反馈到Scene窗口内进行展现。

等等,Game窗口不也是Scene的内容?

如果你在把玩编辑器,其实切换到Game页签的时候,你可以看到好像显示了这个方块的侧视图

确实Game窗口也是显示当前Scene的内容在渲染后的效果,但是视角和Scene不同,那么视角为什么不同呢?

游戏中的相机

这里我们就需要牵扯到相机的概念了,很显然,在一个3D游戏,甚至是2D游戏中,游戏视角不会一尘不变,而视角则直接关系到在屏幕上最终显示的是哪些游戏内的物体,在视线之外东西是不会显示的。

所以游戏内任何的画面显示效果,一定是基于某个相机来说的,没有相机而去谈最后渲染的结果是无稽之谈。

那么场景内什么东西代表我们所说的相机呢?对了,就是前面说的场景创建完后默认带的两个物体其中之一:Main Camera。

这个英文翻译过来就是 主相机 的意思,这个相机则确定了Game窗口下,你所观察这个场景的视角是怎么样的。

等等,Scene窗口的呢?

Scene窗口不受场景内的相机物体的设定,是单独自己一个内置相机,可以切换到Scene窗口后,在窗口内部按住鼠标右键,然后滑动鼠标,或者按wasd,你会发现你可以直接控制Scene窗口的视角,跟在玩一个第一人称射击游戏一样!

下一章

这一章已经写的比较长了,先消化消化,看到这里可能会有很大的一个疑问:

为什么Scene窗口的相机不是Scene自己内部的Main Camera?为什么要设计Game和Scene两种视角?

下一章我们将会围着这个问题详细讲解现代游戏引擎的标配:编辑时和运行时的区分。

想写代码了?还早着呢(笑

猜你喜欢

转载自blog.csdn.net/z175269158/article/details/129832145
1.5
今日推荐