【GAD翻译馆】VR100天教程:第二天通过Unity Space Shooter教程

发表于2017-10-18
评论4 4.3k浏览

译者:刘鸿(lewis2012251423807     审校:王玥亭(玥亭)


欢迎回到我VR100天教程的第二天!

我们上次学习的是Unity Roll a ball教程。从中学到了很多关于如何在Unity中编码,以及如何使用它们现有的API。更重要的是,我学会了如何浏览和使用Unity编辑器!

编辑器与Web或移动开发相比绝对不同,你可以通过代码创建所有内容,但编辑器确实使事情变得更容易!

今天在第二天教程里,我开始看Unity官方第二个课程,  Unity Space Shooter,从上一个教程中我已经学到了很多关于Unity的内容,甚至可能让我开始开发自己的简单游戏(有很多来自stackoverflow的帮助),但相反,我决定通过更多的1 - 2个教程来巩固我的基础。

 

游戏设置,玩家和摄像机
设置项目

不像之前的教程,我们只是使用简单的材料和形状,这次我必须使用实际的资产(assets)。

我要做的第一件事就是下载教程提供的资产(assets)。

我看到,当你在Unity中创建一个新的项目。如果你点击这个标签,你可以看到这个项目,你可以在那里下载(或者从 Unity资产商店下载)。

然后当你创建一个新项目时,只需确保添加资源包资源:

设置Unity教程后,我发现你可以通过点击游戏(Game )选项并选择下方的分辨率选项来设置和创建游戏的分辨率来调整游戏的屏幕分辨率。

到目前为止一直很好,没有什么太复杂的!

 

玩家GameObjectPlayer GameObject

现在我已经设置了该项目,我已经开始创建玩家GameObject

这与我在之前的教程中所学的完全不同。除了这次,我没有创建一个3D球体,而是拖动一个现有的模型资产(model asset)给我 。

很酷的船!

在这个视频中有一些有趣的东西值得注意

 

网格碰撞器,网格过滤器,和网格渲染器

看看这艘船的组件,我们看到有一个网格过滤器和一个网格渲染器。

从一个简单的谷歌搜索:

网格过滤器 组件采用网格,它是一个3D对象,它由三角形创建,因为三角形是在GUI编程中最有效的形状。

网格过滤器会根据你提供的网格创建你的GameObject的形状。

然后,如果你想要看到模型的样子,你需要一个网格渲染器,它需要你的网格,并在它上面应用一个材料。这种材料就是你上面看到的那艘船的外壳。

最后,我们有一个网状的碰撞组件,它需要一个网格。这使我们能够制造出与我们船的精确形状相匹配的碰撞器。

考虑到我们必须要做的游戏和性能权衡是很重要的。

更精细的碰撞器使得 Unity做更多的工作使得游戏性能下降。但另一方面,我们可能不想在我们的船上创建一个立方体碰撞器。

如果我们使用立方体碰撞器,在太空船的前部,虽然没有任何网格但是也会发生碰撞。

在像这个太空射手这样的更细粒度的控制游戏中,那将是很糟糕的。

简单的方法改变你的游戏转换值

在另一个没有相关的注释中,我发现了一个很好的编辑器的技巧。

如果你想尝试使用并改变这个值,而不是手动输入值,你实际上可以左键单击此图中圈出的属性

然后从拖拽滑动鼠标来改变值。这比手动输入值要简单得多!

 

相机和照明

在下一集视频教程中,我们会学习相机和光照。

 

相机

在相机组件中,你可以设置背景。在我们的例子中,我们只设置了一个黑色背景,除了我们的太空船外,所有的游戏都是黑色的。

 

光照

在后来的Unity版本中,该项目已经在hierarchy面板中带有定向光,但是这些光源,正如你所期望的,照亮了你的游戏!

定向光只是从某个方向发出的光。

你可以调整光线的颜色,光线的强度,光线的方向以及其他许多东西。然而,在这种情况下,我们只是把它移动了一点,光线的强度,让我们的太空船看起来像我们想要的样子。

 

添加一个背景

创建背景和向现有的形状对象添加材料非常相似。对于这个项目,我们创建了一个 四边形(quad),你可以把它想象成一个平面,你不能改变Y的比例。

我们有一个现成的.tif文件提供给我们用来创建对象,但我们的四边形(quad)对象只需要材料。我们怎么才能让它发挥作用呢?

事实证明,如果要将.tif文件拖动到四边形(quad)中,它会自动为你创建可以使用的材料。

 

着色器

另一个简单的话题是着色器。根据我的理解,着色器是用来渲染材质。它赋予我们在现有图像之上应用亮度、颜色和其他特殊效果的能力。

幸运的是,我们不需要学习如何去做这些(然而),我们可以只使用现有的Unity提供给我们的东西。框架,太棒了!

在视频教程中,我们应用了Unlit Texture Shader来让我们的背景图像看起来更亮。

 

移动太空船

现在我们的环境设置差不多了,我们终于开始做一些代码编程了。

让我们把这段代码分解一下。

 

刚体(RigidBody

现在最重要的是在Unity 5.X中,这段代码实际上不会运行。那是因为我们不再像现在一样得到我们的刚体组件。

我们必须做一些类似于roll-a-ball教程的事情,并在Start()函数中保存我们的刚体实例,比如:

现在,我们必须使用GetComponent<RigidBody>来访问我们的GameObject的组件

 

边界(Boundary

你可能会注意到的第一件事是还有一个类:边界(Boundary)。代码的上面有[System.Serializable]

 

运动

为了移动飞船,我们使用了类似于我们在第1天使用的小球教程。

我们看到我们仍然使用相同的FixedUpdate()函数,我们以同样的方式获取玩家的移动输入。

新的有趣的部分是使用更多的Unity的库。

Unity有自己的数学库,Mathf.库函数为我们提供了快速的游戏计算。

在本例中,我们使用Mathf.如果我们的位置超过了最小值,它就会停留在最小值,如果超过最大值,它就会停留在最大值。

 

创建射击

所以现在我们有了太空船和运动,我们开始新的内容,射击的东西!

1)我们创造了子弹,我们创造了背景。

2)我们创建一个四边形(Quad)对象,然后使用.tif文件创建一个材料(或者只是使用现有的)并附加材料。

3)我们应用了一些着色器。我们可以通过使用移动着色器代替普通的着色器来优化我们的性能。移动着色器提供较少的控制,但其结果是它们的计算量较少。

最后,我们有了让我们的子弹前进的代码:

射击

现在我们已经创建了上面完成的子弹的预制,我们可以开始进行射击了。

在视频中,可以看见我们创建了一个新的“spawner”游戏对象(GameObject)。

spawner”基本上只是一个空的游戏对象(GameObject),我们使用它的位置创建新的子弹。

这里重要的是让“spawner” 游戏对象(GameObject)成为玩家游戏对象(GameObject)的子元素,这样它就能一直与我们的飞船保持一致。

在我们的脚本中,我们为子弹预制和生成点位置添加了一个公共变量。

在代码中,我们使用Input类来检测用户何时点击火按钮(左键单击)并检查射击延迟。

有趣的部分是我们如何创建我们的子弹。这在Unity中使用Instantiate功能完成。

我们只需要传入GameObject,我们要创建一个副本,它的起始位置和它的旋转。

就是这样!

 

结论

2天,我完成了 Space Shooter 教程的第一部分。再说一次,很多学习实际上是在编辑器的代码之外进行的。

好消息是,我开始看到类似的东西使用GameObjects,材料,和prefabs来命名一些例子。

一切似乎都很简单。现在我可能有偏见,因为我已经知道如何编写代码了,但我有一个很好的感觉,我们会再次看到很多这样的API

这是我希望看到的模式,我用来做自己的游戏。

我的目标是足够了解Unity中的可用内容,所以我可以分支出来并开始编写自己的代码!

旁注:哇这些写的很久!我实际上想知道需要更长时间,浏览视频,学习和了解发生了什么或撰写这些说明!

阅读原始文章 

访问 VR挑战100的内容表

【版权声明】

原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。

 

 

 

 

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引