关于Unity的游戏的运行模式
游戏有个入口main函数,执行完main函数就返回
main函数中的步骤
1.初始化
2.while(true){
a.检查有没有消息,包括鼠标有没有被点击,键盘有没有被点击,自定义事件等等,有消息就处理
b.绘制游戏场景
c.看看时间是不是还没有到(0.016秒),如果没有到,就稍稍地休息一会儿(Sleep),如果a和b只用了0.01秒,那么休息0.006秒,维持帧频在60上下,不大大地超过或低于
如果cpu很低端,1秒最多只能绘制30次,那么游戏运行的时候就不会有休眠的时间,而且cpu是作死地去绘制,为游戏换取更大的流程程度,手机会很烫,游戏会一卡一卡地。
但是卡归卡,游戏角色的移动还是从A到B点,可能本来A到B点是有5个画面的,现在因为cpu比较差,只能绘制3个画面,所以看起来比较卡,但是结果还是移动到了B点。
}循环
帧频
while循环,1秒钟可以循环多少次,比如我的电脑,cpu好一点,1秒钟可以绘制80次(80FPS/S),研究表明!秒钟60次(60FPS/S)人就感觉非常流畅了,再往上人眼识别不出区别,反而会消耗CPU,手机可能很快就没电了,用户体验就不好了。
所以60FPS/S,一帧的时间,也就是一次循环的时间,为1/60=0.016秒,也就是一次while循环中a和b的时间要小于等于0.016秒。
2.5G的cpu,1秒钟可以做2.5*1024*1024*1024次加法。
Unity是组件化的开发模式
1.当组件被挂载到节点上的时候,执行组件自己的Awake()函数
2.当被挂载组件的节点第一次刷新之前(执行节点While循环的a之前或者还没进入while循环),节点下的每个组件调用自己的Start()函数
3.当被挂载组件的节点在处理绘制场景的时候(执行节点While循环的b),节点下的每个组件调用自己的Update()函数
可以知道,节点有个大的while循环,而这个大循环调用的是每个组件的Awake,Start,Update函数的
while循环把组件的几个入口接入了进来
1.Awake:组件实例加载的时候调用,初始化可以在这里写,看习惯
2.Start:组件实例在第一次Update或者FixedUpdate之前调用,初始化可以在这里写,看习惯
3.Update:游戏刷新的时候调用,帧频不是固定的
4.FixedUpdate:物理引擎每次固定刷新的时候调用,与帧频无关,主要是用于物理计算
5.OnGUI:绘制2D元素入口的时候调用,例如玩家的昵称,血条,draw出GUI元素
组件是在12345入口下开发出来的模块,实际上我们是在已经写好的Unity工具的基础上,我们为这个工具根据它的逻辑,来开发我们的模块,模块的入口就是12345,我们都是给Unity写代码,实际上是在写代码模块,模块又叫做组件,入口又叫做接口。
每个组件类都继承于MonoBehaviour这个基类,它是Unity为我们提供的父类,我们自己写的组件类都要继承于这个类,是组件的基本规则,我们要扩展Unity,就要遵守它的规则,组件类的名字要和脚本名字一样。
正是因为我们自己写的组件类继承了MonoBehaviour,所以Unity的底层大While循环才调的到12345接口,而我们在1234中写自己的逻辑,就相当于我们扩展了Unity的游戏部分。
挂在节点上的其实是组件实例,组件类只是一个定义,猫类,狗类,但是挂在节点上的是具体的什么猫什么狗。
一个脚本中其实也可以定义多个class,但是规范是一个脚本对应一个组件类。
一个节点中其实也可以挂载多个相同的脚本,不会冲突,这些脚本只是组件类实例出来的组件实例而已,不是类。
关于Unity的游戏的运行模式的更多相关文章
- Unity网页游戏
Unity网页游戏是跑在浏览器的UnityWebPlayer插件中的,运行的模式是webplayer.unity3d+html 在嵌入UnityWebPlayer的网页中会调用UnityObject2 ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...
- Unity非运行模式下实现动画播放/回退工具
实现效果 核心功能 支持选定模型(带Animator)在非运行模式下,播放/暂停/停止动作. 支持动作单帧前进,单帧回退(帧时间默认0.05f,可以代码设置). 支持滚动条拖拽,将动作调整到指定时间. ...
- 使用Unity制作游戏关卡的教程(一)
转自: http://gamerboom.com/archives/74131 作者:Matthias Zarzecki 我正在制作<Looking For Group – The Fork O ...
- Unity MMORPG游戏开发教程(一)——初识Unity
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以C#为介绍语言,基于Unity2017.4.x. 一.环境搭建 我使用的是Unity+VSCode,用的是mac系统,windows的自己 ...
- Unity MMORPG游戏优化经验分享
https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...
- 【Unity 3D 游戏开发】Unity3D 入门 - 工作区域介绍 与 入门示例
一. 工作区域详解 1. Scence视图 (场景设计面板) scence视图简介 : 展示创建的游戏对象, 可以对所有的游戏对象进行 移动, 操作 和 放置; -- 示例 : 创建一个球体, 控制摄 ...
- Unity 3D游戏开发学习路线(方法篇)
Unity 3D本来是由德国的一些苹果粉丝开发的一款游戏引擎,一直只能用于Mac平台,所以一直不被业外人士所知晓.但是后来也推出了2.5版,同时发布了PC版本,并将其发布方向拓展到手持移动设备.Uni ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
随机推荐
- 使用ionic播放轮询广告的方法
使用ionic中的ion-slide-box实现,下面是完整的代码示例: <!DOCTYPE html> <html ng-app="app"> <h ...
- 视频编码格式转换 MP4
视频工具有很多,如专业的premiere,但是我们只要涉及后期转换,不涉及制作,所以用不到这末专业的工具. 一般来说,使用暴风转码或者qq影音工具就足以应付我们的日常转换需求,下面以qq影音软件做说明 ...
- UITextView 的使用
直接上代码: // // RootViewController.m // UIText_test // // #import "RootViewController.h" #imp ...
- linux内核——PAE(物理地址扩展)
引入PAE机制后,分页模式是怎样的呢? 首先,要搞明白几件事,2.6.11以上版本的linux内核中,存在4中页表(页全局目录,页上级目录,页中级目录,页表),这些页表结构是已经存在于硬盘中的,当进程 ...
- 【centos6.5】安装LAMP
转载至:linux公社 https://www.linuxidc.com/Linux/2014-07/104563.htm
- `libsass` bindings not found. Try reinstalling `node-sass`?
本篇文章由:http://xinpure.com/libsass-bindings-not-found-try-reinstalling-node-sass/ 坑一记 `libsass` bindin ...
- 推荐10款最常用的Android开发工具
我们使用各种语言进行开发时,总是会用到各种各样的开发工具.有些开发工具是开发人员的必备品,有些则是为了提高开发效率而用.Android开发同样也会用到多种开发工具,供开发人员设计.创建.测试和发布程序 ...
- Android 系统 root 破解原理分析 (续)
上文<Android系统root破解原理分析>介绍了Android系统root破解之后,应用程序获得root权限的原理.有一些网友提出对于root破解过程比较感兴趣,也提出了疑问.本文将会 ...
- 对C++对象内存模型造成的影响(类/对象的大小)
首先重新回顾一下关于类/对象大小的计算原则: 类大小计算遵循结构体对齐原则 第一个数据成员放在offset为0的位置 其它成员对齐至min(sizeof(member),#pragma pack(n) ...
- tp读取器和写入器
一.读取器 控制器调用如下: //以ID的方式查询数据$user=User::get(3);//查询ID为3的单条数据echo $user->username;//以对象的方式显示对应的字段值 ...