游戏有个入口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的游戏的运行模式的更多相关文章

  1. Unity网页游戏

    Unity网页游戏是跑在浏览器的UnityWebPlayer插件中的,运行的模式是webplayer.unity3d+html 在嵌入UnityWebPlayer的网页中会调用UnityObject2 ...

  2. Unity 2D游戏开发教程之2D游戏的运行效果

    Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...

  3. Unity非运行模式下实现动画播放/回退工具

    实现效果 核心功能 支持选定模型(带Animator)在非运行模式下,播放/暂停/停止动作. 支持动作单帧前进,单帧回退(帧时间默认0.05f,可以代码设置). 支持滚动条拖拽,将动作调整到指定时间. ...

  4. 使用Unity制作游戏关卡的教程(一)

    转自: http://gamerboom.com/archives/74131 作者:Matthias Zarzecki 我正在制作<Looking For Group – The Fork O ...

  5. Unity MMORPG游戏开发教程(一)——初识Unity

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以C#为介绍语言,基于Unity2017.4.x. 一.环境搭建 我使用的是Unity+VSCode,用的是mac系统,windows的自己 ...

  6. Unity MMORPG游戏优化经验分享

    https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...

  7. 【Unity 3D 游戏开发】Unity3D 入门 - 工作区域介绍 与 入门示例

    一. 工作区域详解 1. Scence视图 (场景设计面板) scence视图简介 : 展示创建的游戏对象, 可以对所有的游戏对象进行 移动, 操作 和 放置; -- 示例 : 创建一个球体, 控制摄 ...

  8. Unity 3D游戏开发学习路线(方法篇)

    Unity 3D本来是由德国的一些苹果粉丝开发的一款游戏引擎,一直只能用于Mac平台,所以一直不被业外人士所知晓.但是后来也推出了2.5版,同时发布了PC版本,并将其发布方向拓展到手持移动设备.Uni ...

  9. Unity 2D游戏开发教程之精灵的死亡和重生

    Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...

随机推荐

  1. T-SQL 之 语法元素

    一.标识符 在T-SQL语言中,对SQLServer数据库及其数据对象(比如表.索引.视图.存储过程.触发器等)需要以名称来进行命名并加以区分,这些名称就称为标识符. 通常情况下,SQLServer数 ...

  2. rtsp摘要认证协议(Response计算方法)

    rtsp摘要认证协议(Response计算方法) 说明: 例如:OPTIONS rtsp://192.168.123.158:554/11RTSP/1.0   RTSP客户端应该使用username ...

  3. web前端开发文档

  4. 金蝶K3,域环境中,无本地用户管理员权限的域用户如何设置注册表权限?

    如果该用户是属于Power Users组:只需要给用户添加注册表中的HKEY_LOCAL_MACHINE的SOFTWARE完全控制的权限.(勾选允许父项的继承权限和传播到该对象和所有子对象) 如果该用 ...

  5. 旧文备份:简单CANOpen 协议说明

    (十年前的旧文,不舍等扔) 创建日期:2005-11-17 修改日期:2005-11-17 文件名称:简单CANOpen 协议说明.doc 作者:winshton 版本:V1.0 (注:本文以24in ...

  6. Native App、Web App 还是Hybrid App

    Native App.Web App 还是Hybrid App? 技术 标点符 1年前 (2014-05-09) 3036℃ 0评论 一.什么是Native App? Native App即原生应用, ...

  7. android中RecycleView分页原生代码封装,无任何第三方代

    概述 RecycleView分页加载封装,简单方便,功能齐全 详细 代码下载:http://www.demodashi.com/demo/13283.html 一.场景: 在项目开发中经常使用到列表集 ...

  8. iOS GZWaterfall任何形式的瀑布流

    概述 使用UICollectionView可以布局各种各样的瀑布流,下面我写了几种不同布局的瀑布流样式 详细 代码下载:http://www.demodashi.com/demo/11018.html ...

  9. SpringMVC与SiteMesh

    SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证 SiteMesh3.0的下载,简介与使用 总结: springmvc结合sitemesh总共分三步: 1.添加si ...

  10. SQL truncate/delete/drop 区别

    相同点 1. truncate 和不带 where 子句的 delete 以及 drop 都会删除表内的数据. 2. drop/truncate 都是 DDL 语句(数据定义语言),执行后会自动提交. ...