学习游戏开发周11

欢迎来到第11周!

我完成了来自https://udemy.com/unitycourse/的一个项目,该项目是断路器的克隆版本。 接下来的30天左右,您可以在这里播放。 我在游戏中添加了自己的调整,例如上周提到的游戏状态和游戏状态。 还有一些通电。 这是我的自动化AI玩游戏的一点点gif。

最后,您可以看到我的多球加电被激活。 我已经知道了,加快球速,射出子弹和更长的球拍。

错误修复

大部分游戏都进行得很顺利,但是我确实遇到了一些我想谈论的错误。

首先,球离开屏幕。 仅在自动模式下,这可能对我来说是个问题。 我加快了比赛速度,有时球会跳过我的边界。 在这种情况下,我决定不将球丢回游戏中,而只是销毁它并将其发送到比赛结束状态。 我无法以正常速度重现该错误,因此我认为这不会成为问题。

第二,无聊的游戏循环。 他们在课程中提到了这一点,但有时您的游戏陷入了一个游戏循环中,只是垂直反弹而没有水平反弹,或者现在球上的速度已经足够了。 为了解决这个问题,他们建议在每次跳动时稍微调整一下速度。 对我来说,这并不能完全解决我的问题。 或至少不够快。 我也不喜欢球永远加速或出现奇怪反弹的想法。 例如:球可能会向左反弹,然后突然无缘无故弹回右边。 因此,我改为添加了另一个调整,每次球触碰桨叶时,如果在x或y坐标上的速度太慢,我将向球添加额外的力,以使其沿该方向继续前进。 类似的解决方案,只是方法略有不同。

第三,强化功能起初添加了一些怪异的动态,使我的游戏出现了故障。 第一个,无论出于何种原因,都有多个球使难以有效计数。 在课程中,他们谈论创建变量来跟踪创建和销毁了多少块砖。 如果该数字变为0,则赢得该级别。 我尝试对多个球进行此操作,但有时并不总是能正确跟踪。 相反,我决定创建一个包含所有活动游戏球对象的数组,并查看该数组何时变为0。 这为我解决了。 另一个加电问题是我的射击子弹。 子弹将在游戏空间中发射并与球互动。 我不想要那样,所以我只是创建了一些新图层,并确保来自球空间和子弹空间的碰撞不会相互作用。

Unity课程的下一个项目是Laser Defender游戏。

该游戏实际上与打砖块游戏非常相似。 用太空船代替桨,用敌舰代替砖,用子弹代替球,就可以理解。

我们在这里所做的某些事情虽然有所不同,但不是直接在场景中放置敌人,而是通过脚本添加了它们。

为此,您只需通过引用预制实例就可以在代码中实例化游戏对象。 您也可以使用transform.parent将飞船的父元素设置为位置游戏对象。 这基本上就是您在上面看到的。 游戏开始时会产生所有敌方飞船。

我决定也为我的版本添加一些功能。 您可以得到盾牌,更快的子弹和健康状况。 对于健康栏,我使用了滑块(这是我从另一门课程中学到的技巧)。 到目前为止,我真的很喜欢这门课程,因为许多课程都是从挑战开始的。 他们没有花时间去编码,而是花时间告诉您做一些事,然后再告诉您如何做。 当然,您可以跳过类似的内容,而只是编写代码,但是由于挑战易于解决,因此本课程的结构感觉非常好。 我还发现自己需要进行一些调整,以使其与之前学到的东西相适应。

您也可以在https://gamebucket.io/game/bd3807ec-ecbf-46b8-840e-54974814a92b上玩此游戏

Gamebucket可让您将游戏保持30天的活动状态,因此最终链接也将失效。

我曾经有一个个人网站,但是收费却上涨了,我只是没有使用那么多,所以我最终只是取消了它。 但这确实使我考虑为自己设计一个新的投资组合网站。 因此,我花一些时间做一些更具体的C#事情,同时还要做Unity课程。

字段和属性

C#中的字段本质上是在类中存储数据的方式。 按照惯例,它们被命名为“ _firstName”并且是私有的。 它们是私有的,因为它们通常不希望外部方法直接更改信息并破坏程序。 为了访问这些字段,我们使用称为属性的东西。 属性可以自动实现或具有后备字段。 自动实现的属性看起来像

公共字符串FirstName {get; set;}

在这种情况下,其行为类似于仅具有公用字符串FirstName。 但是,使用属性的强大之处在于,您可以在获取和设置属性时更改默认行为。 例如,假设您不想让某人将一个空字符串分配给FirstName。 您可以在代码中做一些事情来每次检查,创建方法或使用属性。

使用属性和后场(_firstname),可以使分配或获取属性之前进行简单验证的工作稍微容易一些。

建设者

构造函数可帮助您构建对象并分配默认变量。 因此,在我们的人员示例中,我们可以执行以下操作

然后只需输入“ Person me = new Person(“ Peter”,“ Nguyen”)来创建一个新对象。

构造函数应与该类具有相同的名称,并且您可以创建几个采用不同参数的不同构造函数方法。 想象一个年龄属性,它将是可选的。 如果您掌握了这些信息,则可以有一个分配年龄的构造函数,而另一个没有年龄的构造函数和C#会为您的情况选择正确的方法。

下周,我将前往泰国工作约3周,因此我可能不会做太多编码,但是我肯定会花一些时间阅读https://上的内容。 gamedesignconcepts.wordpress.com/我现在处于3级。