(五)Unity脚本——生命周期函数

创建脚本
点击创建

脚本上右键点击 Edit Script 进行编辑

本人用的脚本编辑器是vs2015中文版,如果没有vs的小伙伴请戳下面的下载链接,里面还有详细说明。
vs2015中文旗舰版下载
脚本编辑界面

我们会发现,脚本里,自带两个函数:

void Start(){

}

void Update(){

}

Start()方法在Update被调用前进行调用,只调用一次。(所以Start()方法无论写在上面还是下面都在Update之前执行)Update方法每帧都要执行一次

我们先看一下脚本的流程图,然后再进行逐个讲解及汇总。

生命周期

Reset:在用户点击检视面板的Reset按钮或者首次添加该组件时被调用。此函数只在编辑模式下被调用。
Reset最常用于在检视面板中给定一个默认值。

Awake(一次):Awake在所有对象被初始化之后调用,用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内Awake仅被调用一次。Awake不能用来执行协同程序。
每个游戏物体上的Awake以随机的顺序被调用。所以在一般时候,用Awake来设置脚本间的引用,然后用Start来传递信息。

OnEnable:在Awake之后调用。控制脚本中组件的启动与禁用。
例如:this.enable=false,则会直接跳转到OnDisable方法执行一次,其它的任何方法,将不再被执行。

Start(一次):Start函数总是在Awake函数之后调用。Start在生命周期中只被调用一次。
Start和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码,协调初始化顺序。

FixedUpdate(每帧):固定帧(固定的时间间隔,不受帧率(FPS)影响)更新,更新频率默认为0.02s。
FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。

Update(每帧):正常帧更新,每一帧都执行,用于更新逻辑。
Update比较适合做控制。如果卡帧了Update就不会再执行,而FixedUpdate则继续执行。

LateUpdate(每帧):在所有Update函数调用后被调用,和fixedupdate一样都是每一帧都被调用执行。
LateUpdate可用于调整脚本执行顺序。例如:相机跟随就可以用这个函数,即人物移动在Update中实现,相机跟随在LateUpdate()中实现,播放后的效果是:角色移动发生在前,相机移动紧跟其后。(如果相机也在Update里执行,就可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。)

OnGUI(每帧)在渲染和处理GUI事件时调用。每帧都执行。
在界面显示一个button或label时常常用到它。

OnDisable:脚本被卸载时,OnDisable将被调用(脚本不会被销毁)。OnDisable不能用于协同程序。
常用于一些用于清理的事件。

OnDestroy:当MonoBehaviour将被销毁时,这个函数被调用。OnDestroy只会在预先已经被激活的游戏物体上被调用。OnDestroy也不能用于协同程序。

函数执行顺序:

**Awake→OnEable→ Start → FixedUpdate→Update →LateUpdate →OnGUI →Reset → OnDisable →OnDestroy **

最先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,如果在这个地方将当前脚本禁用:this.enable=false,则会直接执行OnDisable方法,其它的任何方法,都将不再被执行。

如果当前脚本处于可用状态:this.enable =true,则按正常的执行顺序是继续向下执行OnEnable

再向下执行,会进行一个判断,如果Start方法还没有被执行,则会被执行一次,如果已经被执行了,则不会再被执行。这是个什么意思呢?我们可以在某个脚本中将组件禁用this.enable=false,再启用时会转到OnEnable处执行,这时继续向下走,发现Start执行过了,将不再被执行。比如说:第一次启用时,将怪物的初始位置定在了(0,0,0)点,然后怪物可能会发生了位置的变换,后来被禁用了,再次启用时,不会让怪物又回到初始的(0,0,0)位置。

继续向后执行,就是FixedUpdate了,然后是Update,再然后是LateUpdate,如果后面写了Reset,则会又回到Update,在这4个事件间可以进行循环流动

再向后执行,就进入了渲染模块(Rendering),非常重要的一个方法就是OnGUI,用于绘制图形界面,每帧都执行。

再向后,就是卸载模块(TearDown),当被禁用(enable=false)时,会执行OnDisable方法,但是这个时候,脚本并不会被销毁,在这个状态下,可以重新回到OnEnable状态(enable=true)。

当手动销毁或附属的游戏对象被销毁时,OnDestroy才会被执行,当前脚本的生命周期结束。

有了生命周期,物体才能动起来。我们以后要用这些方法做游戏了,理解并牢记这些方法吧。

参考博客:
Unity 脚本生命周期流程图 - 无幻
Unity生命周期 - 宁静致远

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 一,生命周期函数 1,按执行的先后顺序代码如下 // 注意:在游戏运行过程中,一个游戏对象第一次启用的时候,会执行...
    彭晋阅读 881评论 0 0
  • Unity脚本执行顺序:Awake -->OnEable--> Start --> FixedUpdate -->...
    夜行水寒阅读 2,601评论 0 1
  • 一、下面我们来学习下脚本生命周期常用的10个脚本函数: (1) Reset() 组件重设为默认值时(只用于编辑状态...
    李昀熹1112阅读 22,429评论 0 12
  • Unity中脚本的生命周期就是代码中脚本函数的执行过程(顺序),具体过程由图1.1,1.2和1.3介绍: 这里我们...
    S_H_C阅读 1,667评论 0 2
  • 有时候我们。总是在不经意间失去某些曾经认为很重要的东西; 有时候我们总是在不经意间想起某些人; 有时候我们聚在一起...
    我家三叔阅读 189评论 0 0