天天看点

《Unity 5.x游戏开发实战》一2.6 定时器和倒计时

本节书摘来异步社区《unity 5.x游戏开发实战》一书中的第2章,第2.6节,作者: alan thorn 译者: 李华峰 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。

现在已经拥有一个具备场景和金币的关卡了。凭借新添加进来的coin.cs脚本,现在的金币也可以被正常计数和采集了。不过对于玩家来说,现在的关卡中仍然没有挑战性,因为他们既赢不了,也输不了。在这个游戏中,玩家没有需要达成的目标。因此时间限制也就成为了游戏中的一个重要条件:它定义了玩家胜利和失败的关键。也就是说,在游戏时间结束前,玩家采集到了所有的金币,就可以看作玩家胜利;玩家没有采集到所有的金币,则玩家失败。所以需要为这个关卡创建一个倒计时的计数器。首先选择菜单栏上的“gameobject | create empty”创建一个新的空游戏对象,并为其起名为“level timer”,如图2.25所示。

《Unity 5.x游戏开发实战》一2.6 定时器和倒计时
注意  记住,游戏开始时,玩家是看不到任何空游戏对象的,因为这些对象身上没有任何的网格渲染组件。但是这些对象在用来创建一些不直接对应到物理的和可见实体上的功能和行为时,就显得特别有用了,例如定时器、管理器和游戏逻辑控制器之类。

接下来,创建一个名为“timer.cs”的新脚本文件,然后将这个脚本添加到场景中的leveltimer 对象上。完成这个操作以后,在这个场景中,定时器就开始起作用了。不过需要确定的是,这个定时脚本仅仅被添加到了场景中的一个物体上,而不是多个物体上。否则,在同一场景中可能就会出现多个相互矛盾的定时器。可以使用层次(hierarchy)面板来查找整个场景中特定类型的组件。首先在层次(hierarchy)查找框中输入“t:timer”,然后按下键盘上的回车键开始查找。这样将会查找到场景中所有带有定时器类型组件的对象,并将在层次(hierarchy)面板中显示查找的结果。另外,在这个层次(hierarchy)面板中只会显示匹配的结果。在查找时输入的“t”表示这次查找的条件是类型,如图2.26所示。

《Unity 5.x游戏开发实战》一2.6 定时器和倒计时

如果在查找过程中停止这次查找,并返回层次(hierarchy)面板的初始状态,则可以通过单击查找对话框右侧的“×”号图标按钮来实现。不过这个按钮很难发现,如图2.27所示。

《Unity 5.x游戏开发实战》一2.6 定时器和倒计时

如果希望timer脚本生效,那么必须在里面编写相应的代码。下面的代码示例2.6给出了timer.cs中的完整代码。如果读者之前从未在unity中进行过系统的编码,那么这段代码将会是非常有学习价值的。这段代码给出了很多十分重要的特点,代码中的注释给出了详细的说明。

现在对上面的代码进行如下总结。

在unity中,将类变量声明为公共变量(例如public float maxtime)之后,会作为一个可以编辑的字段显示在object inspector处。虽然这并不支持所有的数据类型,但是却是相当有用的一个功能。这意味着开发人员可以直接从inspector处监视公共变量的值,或者设置公共变量的值,而不是每次都要对代码进行修改和编译。默认情况下,在inspector处私有变量是看不到的。不过,如果需要,可以使用serializefield属性强制使它们可见。如果私有变量前面加上了这个属性,例如countdown变量,就会在不改变变量的作用范围前提下,像一个公共变量一样显示在对象inspector中。

完成timer脚本的创建工作之后,在场景中选中leveltimer对象。从对象的检查(inspector)面板中就可以看到玩家在当前关卡完成任务所允许的最大时间限制(以秒为单位),如图2.28所示。这里将时间设置为60秒。这意味着玩家需要在关卡开始之后的60秒之内完成所有金币的采集工作。如果定时器中的时间耗尽,那么这个关卡将会重启。

《Unity 5.x游戏开发实战》一2.6 定时器和倒计时

现在有了一个具备倒计时功能的完整关卡,可以完成金币的采集,而且定时器也可以耗尽时间。总的来说,现在的游戏已经初具规模了,不过这里还有一个更深入的问题,后面内容将进行讲解。

继续阅读