欢迎回到第21天。在过去的几天中,我们致力于为玩家创建一个卫生系统,并解决与之相关的敌人的一些问题。
现在我们可以杀死敌人,而敌人可以杀死我们,现在是时候让它变得更完整了!
今天,要做的第一件事是在玩家的生命值达到0时创建游戏结束状态。
为此,我们将使用Unity的UI系统。
这是我们今天的游戏计划。 我们将要:
- 创建一个面板来保存我们的内容
- 添加重试按钮和文字游戏
- 使用动画使面板在失败时显示
- 在我们的代码中使用我们新的Game Over UI
让我们开始吧!
我们要做的第一件事是通过UI创建游戏,当玩家的生命值降至0时我们将向玩家展示。
我们必须做的第一件事是为我们现有的UI画布HUD创建一个新的Panel UI元素。 我们称面板UI GameOver 。
然后,作为GameOver游戏对象的子代 ,我们将创建一个新的Text and Button UI元素。
让我们进行一些更改,首先我们要更改GameOver屏幕,我们要做的第一件事就是更改Rect Transform。
- 使用Shift + Ctrl键将Rect Transform设置为屏幕的中心,以使面板居中。
- 宽: 300
- 高度: 150
接下来,让我们更改文本 ,这是我们要对文本进行的设置:
- 字体大小: 28
- 字体样式:粗体
- 富文本格式:已选中
- 文字:游戏结束
- 颜色: Alpha设置为255
对于“ 按钮”游戏对象,在“ 矩形”变换内:
- 使用Shift + Ctrl键将Rect Transform设置为屏幕的中央底部,以将Button居中
- 宽: 160
- 身高: 30
- 位置Y: 20
然后在Button的Text游戏对象中,我们将更改Text的设置。
- 字体样式:粗体
- 字体大小: 18
- 富文本格式:选中
完成后,我们将提供以下内容:

现在,我们有了“游戏结束”窗格,接下来需要做的就是创建动画以使其显示出来。
现在,我们只有一个面板站在屏幕前,如果我们要玩游戏,它就在我们面前。
就像在《生存射击》教程中一样,让我们为面板创建一个动画,以显示游戏结束时的情况。
为此,我们将使用Unity的动画功能为Game Over游戏对象创建新的动画。
如果“动画”选项卡不可用,请转到“ Windows” >“ 动画 ”以显示窗口。
从面板中选择GameOver游戏对象,然后在“ 动画”选项卡中,单击“ 创建”:

并会要求您创建一个新的.anim文件。
将其移动到我们的Animation文件夹(或要存储的任何位置),并将其命名为Game Over.anim。
这将自动创建GameOver动画剪辑和我们用来附加到游戏对象的GameOver控制器。 实际上,Unity已经将控制器自动附加到我们的游戏对象上。
现在我们已经选择了动画,接下来我们需要确定动画的外观。
这是我的想象:
我们的面板将是不可见的,然后缓慢出现(从alpha 0到1),这种情况发生时,它将开始从屏幕顶部下降到中心(例如,从Y位置100到0)。
一起让它成为现实!
我们需要做的第一件事是向我们的GameOver游戏对象添加一个Group Canvas组件。
我们之所以需要这样做,是因为我们需要能够使动画中的所有内容(父级和子级)透明。 仅通过更改父级的Alpha值,就只会更改其透明度,而不会更改其子级的透明度。
幸运的是Unity想到了这一点,这就是为什么Group Canvas提供alpha属性的众多原因。
现在我们有了所需的所有设置,让我们开始创建动画。
在选择了GameOver游戏对象的“ 动画”选项卡中,我们将单击“ 添加属性”并添加2个属性:
- 画布组> Alpha-设置我们的Alpha
- 矩形变换>锚定位置-设置我们的Y位置
现在我们拥有了所需的所有属性,我们将在不同帧处更改动画制作器中的值,Unity将从头到尾填充这些值。
默认情况下,对于我们所有的属性,动画开始时在第0帧处都有一个关键点 (灰色菱形),在第60帧处有另一个关键点。每个关键点我们都可以设置一个值,Unity会自动显示从一个键到下一个键的值。
重要的是,我们将白线移至要更改其值的特定键。 更改仅适用于我们的白线所在的位置。
对于“画布组”,在关键帧处:
- 0,将alpha设置为0
- 60,我们可以将值保留为1
对于Rect Transform,在关键帧处:
- 0,将“ 锚定位置.y”设置为100
- 60,我们可以将值保留为0
完成后,我们应该有以下内容:


在今天结束之前,我们需要完成2点修饰。
首先是我们不应该在场景中显示我们的Game Over游戏对象。
要解决此问题,我们返回游戏面板中的“ 画布组”组件,然后将Alpha设置为0。
接下来,如果要播放我们的场景,我们的动画将不断重复播放。 我们可以通过在Animation文件夹中选择GameOver.anim并取消选择Loop Time来解决此问题。
这将是我们的短期解决方案,明天,我们将为动画实现状态控制器,以便我们可以真正控制动画的方式。
今天就这样! 明天,我们将继续播放动画并将其附加到玩家的生命值低于0且重新启动游戏等其他操作结束时。
在那之前,祝您有个美好的夜晚!
资料来源:第21天
访问Unity VR开发的100天主页。
访问我们的主页