总结1_1:常用周期函数
1.周期函数调用顺序(PS:吐槽一句,不知道是不是转发的缘故,百度上好多写错的,把FixedUpdate->Update写反了):
Awake->OnEnable->Start->FixedUpdate->Update->LateUpdate->OnGUI->OnDisable->OnDestroy
1)挂载脚本:Reset
①Reset是脚本被挂上的时候执行一次,其他时候不执行,严格来说不算周期函数
2)物体(脚本所挂的游戏对象)加载:Awake->OnEnable->Start
①Awake:加载的时候第一个运行的方法,适合用来构建单例,还可以用来进行一些初始化操作。不知道Awake和OnEnable的顺序是不是被unity存在栈里了,最后挂的最先执行。
//单例
//然后在其他类里调这个类的实例:ClassA.instance.DebugCtr();
public class ClassA{public static ClassA instance;private void Awake(){if(instance == null){instance = this;}}public void DebugCtr(){Debug.Log("This is ClassA instance");}
}
②OnEnable:物体显示时被调用
③Start:如果不在Awake里初始化,就可以放在在Start里;Start里面可以用来开启协程
3)物体加载完成:FixedUpdate->Update->LateUpdate->OnGUI
①FixedUpdate:每固定帧率(默认是0.02s,即1/50 s)调用一次,一般用作物理更新。自定义可以在Edit->Project Settings->Time里修改Fixed Timestep的数值
②Update:每帧调用一次(一般趋近0.02s,跟硬件性能和项目内容有关),用来检测事件;
③LateUpdate:与Update同步,紧随其后。摄像机的跟随可以放在里面。
④OnGUI:unity原生的GUI就需要在这里面写
protected void OnGUI(){//DebugCtr(ref isOnGUI, "OnGUI()");GUILayout.BeginArea(new Rect(10,1,200,150));GUI.Box(new Rect(10, 1, 100, 100),"This is Unity GUI");GUILayout.EndArea();}
4)物体销毁:OnDisable->OnDestroy
①OnDisable:物体隐藏时调用,可以用来注销事件
②OnDestroy:物体被销毁时调用,可以用来注销事件
5)看到这里的童鞋有没有想过多个脚本之间,周期函数的规律?
(有脚本A、B,A先挂,B后挂)
B:Awake->B:OnEnable ->A:Awake->A:OnEnable->
B:Start->A:Start->B:FixedUpdate->A:FixedUpdate->B:Update->A:Update->B:LateUpdate->A:LateUpdate->B:OnGUI->A:OnGUI
A:OnDisable->B:OnDisable ->A:OnDistroy->B:OnDistroy
(注意,我分成三段了!!! )
总结:
①Awake和OnEnable先后一起出现;
②物体加载的时候,后挂的先执行;物体销毁的时候,先挂的先执行。
---------------最后,挂上测试的代码 0.0-------------------------------------------------
//**基类**
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NewBehaviourScriptTestBase : MonoBehaviour {protected bool isStart, isAwake, isOnEnable, isNewBehaviourScriptTest,isUpdate, isLateUpdate, isFixedUpdate, isOnDisable, isOndestroy, isOnGUI,isReset;protected virtual void DebugCtr(ref bool isDebug, string msg){}protected void Reset(){DebugCtr(ref isReset, "Reset()");}protected void Awake(){DebugCtr(ref isAwake, "Awake()");}protected void Start(){DebugCtr(ref isStart, "Start ()");}protected void Update(){DebugCtr(ref isUpdate, "Update ()");}protected void LateUpdate(){DebugCtr(ref isLateUpdate, "LateUpdate()");}protected void FixedUpdate(){DebugCtr(ref isFixedUpdate, "FixedUpdate()");}protected void OnGUI(){DebugCtr(ref isOnGUI, "OnGUI()");}protected void OnDestroy(){DebugCtr(ref isOndestroy, "OnDestroy()");}protected void OnDisable(){DebugCtr(ref isOnDisable, "OnDisable()");}protected void OnEnable(){DebugCtr(ref isOnEnable, "OnEnable()");}
}
//**子类A**
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ClassA : NewBehaviourScriptTestBase {protected override void DebugCtr(ref bool isDebug, string msg){if (!isDebug){Debug.Log("A: " + msg);isDebug = true;}}
}
//**子类B**
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ClassB : NewBehaviourScriptTestBase {protected override void DebugCtr(ref bool isDebug, string msg){if (!isDebug){Debug.Log("B: " + msg);isDebug = true;}}
}
总结1_1:常用周期函数相关推荐
- Vue 生命周期函数 详细讲解+中文图解 一目了然 ~ 内有干货
文章目录 一.何为生命周期? 1.含义 2.理解 3.注意点 二.Vue生命周期的主要阶段及其11个周期函数 1.Vue生命周期的主要阶段: 2.图解 3.代码注释(配合理解) 4.面试题? 一.何为 ...
- Unity3D常用的生命周期函数
今天给大家总结一下我们常用的生命周期函数: void Reset() Reset是在用户点击检视面板的Reset按钮或者首次添加该组件时被调用.此函数只在编辑模式下被调用.Reset最常用于在检视面板 ...
- 快速学会MySQL常用操作方法
文章目录 什么是数据库? 数据库管理系统? 数据库存储数据的特点 什么是关系型数据管理系统? MySQL数据库 MySQL数据库服务启动 客户端连接MySQL 导出和导入数据 从MySQL服务器导出数 ...
- vue openlayer单击地图事件循环多次执行_VUE生命周期函数面试题
什么是 vue 生命周期 vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数实现组件数据管理和DOM渲染两大重 ...
- web开发课程,HTML常用的五种标签,附赠课程+题库
标准文档流 标准文档流,指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式.前面内容发生了变化,后面的内容位置也会随着发生变化. HTML就是一种标准文档流文件 HTML中的标准 ...
- 计算机常用工具软件教案,常用工具软件教案.doc
文档介绍: 课题:网络遨游--网络软件 教学目的 熟练掌握下载软件的使用方法. 熟练掌握邮件处理软件的使用方法. 熟练掌握FTP工具软件的使用方法. 熟练掌握搜索引擎的使用方法. 熟练掌握网络加速软件 ...
- python计算无穷级数求和常用公式_傅里叶变换(二) 从傅里叶级数到傅里叶变换...
在上一部分当中,得到了利用三角函数表示周期函数的方法,但是对于非周期函数就...凉了.所以有什么办法吗?没办法(划掉).这时候我们就需要拿出来我们的黑科技--傅里叶变换. 一.傅里叶级数的推广 当然这 ...
- cressman插值_NCL自带常用插值函数集锦
NCL作为一门气象专业语言,自带了很多气象届常用的算法和命令,比如各种强大的插值函数. 平时,我们不管做科研也好,还是做业务也好,都逃不了各种各样的插值:站点插到格点上,格点插到站点上,高分辨率插值到 ...
- 50个常用不定积分公式表_50个公式,50个快速解题法
临考冲刺,快速解题是当前该关注的,50个公式,50个快速解题法,让你考试前定心.1 . 适用条件[直线过焦点],必有ecosA=(x-1)/(x+1),其中A为直线与焦点所在轴夹角,是锐角.x为分离比 ...
- vue 声明周期函数_vue-router路由守卫-上
1. 为什么要使用路由守卫?什么是路由守卫? 第一次认识路由守卫:之前我做过的小项目里面,我们直接在浏览器网址的地方进行修改就能跳转页面,这是不安全的,因此就需要路由守卫,实现通过路由拦截,来判断用户 ...
最新文章
- 计算机 程序 原理,计算机储存程序和程序原理是谁提出来的
- UDP收/发广播包原理及步骤
- Android Studio 1.1.0 导入eclipse android project
- 微信遇到特殊服务器,解决微信网页授权,出现errcode:40163,errmsg:codebeenused,看似微信访问了2次这个回调接口的问题...
- 【转摘】IT人日常的学习—中国消费产业的基本盘和机遇
- why fioriSandboxConfig.json is loaded twice
- linux下编译安装ACE-6.5.1
- Windows Phone 7三触控程序开发
- sql索引面试_关于索引的25个最佳SQL面试问答
- 2089. 找出数组排序后的目标下标
- TNF8SLNO 华为OSN1800全新4路STM-16/8路STM-4/8路STM-1业务板
- 苹果计算机怎么切换科学计算机,Mac如何使用科学计算器
- ftp文件上传及下载工具类
- 脊髓炎起病急 该做好哪些治疗呢?
- win10解决 netstart -ano|findstr “8080“出现netstart不适内部或外部命令
- (四)u-boot2013.01.01 for s5pv210:《mkconfig分析》
- 车架号识别|Vin码识别介绍及APP嵌入集成解决方案
- C++中inet_pton、inet_ntop函数
- 生信技能树课程记录笔记(七)20220531
- 共发射极放大电路---工作