关于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这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
随机推荐
- codeforces 558D Guess Your Way Out! II 规律
题目链接 题意: 给出n和q 表示有一棵深度为n的全然二叉树.叶子节点中有恰好一个点是出口 主角从根往下走.但不知道出口在哪里,但主角会获得q个提示. 像这样标号 q个提示 格式: deep [l, ...
- 在 Ubuntu12.04/Xubuntu12.04 上安装 QQ2012,这才是真正可行的
2012-5-18 11:16:29 1. 安装wine 终端下输入: sudo apt-get install wine 复制代码 有人这样:sudo apt-get install wine ...
- Ubuntu8.04系列-系统优化篇
文章欢迎转载,转载请注明出处:嘉骏苑http://luckiss.blogcn.com 原文出处:http://luckiss.blogcn.com/diary,15151058.shtml ...
- 摘:SQL Server数据类型的25种
我们大家都知道数据类弄是数据的一种基本属性,其主要是表示数据在实际操作中所表示信息的类型.任何一种计算机语言都定义了自己的数据类型. 当然,不同的程序语言都具有不同的特点,所定义的SQL Server ...
- JNI调用之本地库文件的安装
在进行JNI调用的时候.是由java的本地接口调用本地库文件来完毕的,可是本地库文件须要放置到指定位置.JNI接口才干调用到,这个路径是由JVM的系统变量"java.library.path ...
- centos 7 搭建git远程仓储 免密登录
第一步.安装git服务 yum install git 第二步.创建git用户 adduser git 第三步开启公钥验证 vi /etc/ssh/sshd_config 讲文件中的 #PubkeyA ...
- php保存快捷方式到桌面
/** * 保存首页到桌面 */ public function save_shortcut() { $shortcut = "[DEFAULT] BASEURL=http://www.19 ...
- CLoadScene类
#ifndef __LOADSCENE_H__ #define __LOADSCENE_H__ #include "GameFrameHead.h" class CGameScen ...
- python学习之winreg模块
winreg模块将Windows注册表API暴露给了python. 常见方法和属性 winreg.OpenKey(key,sub_key,reserved = ,access = KEY_READ) ...
- Nginx、PCRE和中文URL(UTF8编码)rewrite路径重写匹配问题
最近遇到了使用Nginx 重写中文UTF8编码路径的问题. 才发现默认情况下Nginx的rewrite是不支持UTF8匹配的. 比如: rewrite ^/(..)$ /2个字符文章.html bre ...