辛巴学院-Unity-剑英的c#提高篇(一)主循环

来源:转载

这是测试版

辛巴学院:正大光明的不务正业。

最近刚刚离开了我服务了三年多的公司,因为一个无数次碰到的老问题,没钱了。

之前不知道做什么好的时候,机缘巧合之下和哒嗒网络的吴总聊了一下,发现了vr game这扇窗户,这里权当帮哒嗒网络打个广告吧。^_^

回头看看仓惶的这一段时间,荒废了很多,抽空回来再和大家聊聊c#。

之前做了个入门系列,胡乱说了些东西。感觉入门这样子也就差不多了,该稍微提高一点了。

从写一段程序,到写一个app,写一个游戏,到底其中有什么不同呢?一段程序的执行时间很短,一个应用的执行时间很长,仅此而已。

游戏中存在一个帧的概念。

这个概念大家都知道,类比的话,它就是电影胶卷的格。一格出现一段时间,然后换下一格。

电影一秒24格,游戏用的是一秒30帧,60帧。

电影胶片是在镜头前一格一格的放映,游戏逻辑是在update中一帧一帧的执行。

那么Update函数的驱动是如何完成的呢?

这个东西就是主循环

先来看看一个基本的控制台程序

唔,helloworld,这个程序我们已经很熟悉了。一闪而过的那个版本。因为他执行然后马上就结束了。

那么这个版本呢?

你会说,我去,你写了一个死循环。

是的,主循环就是一个死循环。有了这个死循环,一段程序就能逐渐成为一个应用,一个游戏。

让我们把update拆出来,是不是看起来有点熟悉了。

再来个OnStart,是不是更加熟悉了

原来Unity的MonoBehaviour就是这样啊。

任何的程序中都存在着主循环,在常用的界面框架中,通常隐藏主循环,留下事件型的接口。

主循环很简单吧,仅仅是看起来这样。

游戏程序通常事件型的框架不多,大部分逻辑需要从主循环层次开始组建,也就是你需要对主循环的理解非常深,能够从主循环上创建很多种模式的逻辑。

我们开始来介绍几个常见的

主循环和定时器

试想如下需求,需要每三秒钟打印一条log,怎么做这个三秒钟的计时?

电影是24格,每秒钟24帧,稳定的,雷打不动。通过数帧就知道个大概。

可是大家都知道游戏的帧率是跳跃的,每一帧的时间不固定。

Unity提供了一个参数,告诉你上一帧开始,到这一帧开始经过的时间,单位为秒 Time.Deltatime;

因为每一帧开始到上一帧开始的间隔给你了。只要把他们累加起来,就是一个计时器。你可以用秒表确认一下这个程序,他的表现和你的秒表一样精准,分毫不差。

这就是一个计时器了,一个用不稳定的帧速率的主循环驱动的计时器。只是他光计时了,啥也没干,我们来让他做点什么。

这类的代码,是循环模式中第一常用的,当理解之后就再也不用回头看这些代码。如果这样的代码还要你有所纠结,那就还是要花点功夫,让你能够彻底的理解这个deltatime。

再会,哈库拉玛塔塔



分享给朋友:
您可能感兴趣的文章:
随机阅读: