学习游戏开发周4,5,6

在第4周的中段,我休假了一个星期,前往韩国只是为了娱乐。 这有点弄乱了我的学习进度,因此我在第4周和第5周没有做太多事情。 因此,让我们将我去韩国之前所做的一点与我第六周只是想回顾一下我之前所做的事情结合起来。

在第3周,我从多元视野开始了平等课程。 我决定暂时跳过该课程的其余部分。 我的推理基本上是正确的,现在我通常了解平等在c#和dotnet中是如何工作的,如果我想对平等做更多具体的事情,那么我将回头查找它。 只是感觉不像我现在在游戏开发中会做的事情。 因此,继续进行有关收藏的课程。 在本课程的介绍中,他们说如果您是初学者,请从头开始,但是如果您熟悉数组,则可以跳到接口的单元5或列表上的单元6。 有趣的是几周前,我感觉自己像个初学者,现在已经不完全正确了。

因此,从接口开始,如我之前所说,接口是类实现该接口所必须具有的方法的列表。 因此,如果您具有打印接口,则实现此方法的类必须定义这些方法才能运行程序。 接口不指定如何完成操作,而仅指定必须执行的操作。

在C#中,应该知道很多接口。

那么,它们全都意味着什么呢?

让我们从核心通用接口IEnumerable ,ICollection ,IList ,IDictionary 和ISet 开始。 请注意命名约定。

IEnumerable 基本上说嘿,您可以遍历我。 因此,如果您有一个想要实现此接口的类,则需要有一个GetEnumerator()方法,该方法实际上在项目上进行迭代。

ICollection 继承自IEnumerable ,但添加了一些功能,如添加,删除和清除集合。

IList 向ICollection添加了按索引查找项目的功能。

IDictionary 向集合添加了通过键而不是索引查找价位,显示键或值在集合中以及键或值是否在集合中的功能。

ISet 允许您执行一些设置操作,例如组合集合,查看集合中具有共享值或没有共享值的位置以及比较集合。 这个不是很经常使用。

我本周开始尝试制作自己的飞鸟教程。 我正在做一些屏幕录像,并试图展示在Unity中制作自己的Flappy Bird游戏需要了解的内容。 我的目标是实际上不展示如何制作“飞扬的小鸟”。 我想做一些类似CS50的事情,您在其中了解了某些概念,但是问题集让您必须弄清楚如何自行应用。

我想展示您需要的Unity和C#的不同部分,然后您将自己采取并自己做。 但说实话,这开始需要做很多工作,而且我感觉自己犯了很多错误,我在编码时不得不纠正这些错误。 我可能仍然会尝试这样做,但是我认为我需要做更多的计划。 因此,我想我会在这里写出一些通用概念,如果以后决定这样做的话,这将有助于我更好地制作这些教程集。 如果您对此感兴趣,请告诉我! 兴趣越多,我实际去做的动力就越大。

那么,如何制作飞扬的小鸟?

我将介绍解决该游戏需要掌握的一些主要概念,但首先让我们分解一下游戏的基本部分。

您有一只需要穿越障碍才能获得分数的鸟。 鸟通过点击屏幕移动,并通过撞到障碍而死亡。

在我的游戏版本中,鸟是向前移动的对象,背景是静态的。

死亡时,会报告您的分数和当前的最高分数。

因此,对于鸟,您需要应用碰撞器(圆形碰撞器2d)和刚体2d。 碰撞器本质上是对象周围的区域,如果该碰撞器碰到另一个碰撞器(例如:地面),则将检测到碰撞。 当检测到碰撞时,您可以触发结束游戏的方法。 刚体为您的物体增加了物理性,因此它可能会受到重力等因素的影响。

为了使小鸟移动,您需要创建一个几乎覆盖整个屏幕的按钮。 因此,您需要了解一些有关UI系统的知识。 完成后,您可以创建一种移动鸟的方法,并在每次单击按钮时调用该方法。

用于移动鸟类的脚本涉及通过刚体来处理游戏对象的速度。

这是一个小片段。

我首先想到的是将小鸟向前移动。 我通过获取小鸟的当前位置并将其存储到临时位置来实现。 然后我根据设置的速度向前移动鸟,并将其乘以Time.deltaTime。 Time.deltaTime是完成最后一帧所花费的时间。 从Unity文档

“当您乘以Time.deltaTime时,您基本上表示:我想将该对象每秒移动10米,而不是每帧10米。”

在那之后,我检查是否按下了襟翼按钮,如果是,我将鸟的垂直速度改变了一定量。 这只鸟由于重力而下落。

基本上就是这样。 如果您想知道为什么水平速度为0,那是因为鸟的向前运动是恒定的。 所以我通过改变位置而不是速度来向前移动那只鸟。 它的水平速度实际上是0。

要获得更专业的外观,您需要学习动画和精灵。 每次按下“襟翼”按钮时,应该触发“襟翼”动画。

我认为基本就是鸟的运动。

得分

要获得分数,您需要存储一些基本变量和高分。 应该保存高分,所以这是学习PlayerPrefs(https://docs.unity3d.com/ScriptReference/PlayerPrefs.html)的好时机,这些是存储在游戏中的东西,如果您关闭游戏。

要得分,您需要检测鸟何时经过管道。 在这里,我们可以使用对撞机集作为触发器。

触发盒对撞机不会影响其他对象的物理。 因此,当鸟儿经过这一点时,它不会崩溃。 它会照常继续,但是仍然会触发我们的得分方法。

环境

这是谈论环境的好时机。 地面,管道,背景。 为了检测与地面和管道的碰撞,我们使用了一个盒子碰撞器,当碰撞发生时,它将调用game over方法。

但是《飞扬的小鸟》的关键部分是这种无穷无尽的滚动方式。 您不想用10000个游戏对象来填充游戏,在这里有助于理解收藏家的想法。

在我们的游戏中,鸟类向前移动,因此我们的相机也必须与鸟类一起向前移动,而环境保持静止。 一个收集器将在屏幕的左侧。

这些是带有对撞机的空游戏对象。 当我们的收藏家与它正在寻找的元素(例如管道)碰撞时,它将破坏该管道,然后在相机的右侧创建一个新的管道。 这就是我们获得无限滚动效果的方式。 对于管道,我们还可以进行一些随机化处理,以将管道定位在较高或较低的位置以进行某些变化。 为了有效地做到这一点,我们需要知道当前最后一个管道在哪里,并相应地对其进行间隔。

为了使鸟死亡,它需要撞入管道或地面物体。 那只是另一个盒子对撞机。 发生碰撞时,游戏结束,并且比分通过UI /面板报告。

游戏状态

对于Flappy Bird基本上就是这样,但是我要提到的最后一件事是,您可能想要某种GameManager对象,其中包含一些重要的游戏性(例如游戏状态)。 例如,在此游戏中,某些事物仅应在不同的游戏状态下显示。 如果玩家不活跃,也许我们会显示一个暂停菜单。 如果播放器处于活动状态,则启用襟翼按钮。 如果玩家死了,那么我们需要禁用其他所有功能并显示高分面板,并有一个按钮,他们可以在其中重新玩游戏。 所有这些事情都应该在游戏管理器中进行管理。

如果您不能告诉我,这周对我来说不是一个紧张的学习周。 抽出很多时间后,我认为对我来说重要的是,回顾一下我学到的东西,并确保大多数事情有意义。 下周,我需要重新开始计算,我想我将继续学习Udemy的手机游戏开发课程。