一、添加脚本的顺序

这是一张官方的脚本顺序图

一般,当我们把脚本绑定在游戏对象上时,或者点击绑定好的脚本的reset按钮时,会调用Reset()

当我们初始化一个对象时,会先调用Awake()在调用OnEnable()

GameObject.instantiate(o);

start()在第一次调用update()前调用,有时候start()会在Awake(),OnEnable()执行完后立刻执行,处于同一帧

onDisable()和onDestroy()的执行顺序有点特别:

第一种情况:

  对于不同对象上的不同的脚本,执行是没有先后规律的,且必须成对执行(调用完了onDisable()必须再调用onDestroy())

  eg:

gameobject1:
sc1.cs
sc2.cs
gameobject2:
sc3.cs
sc4.cs
gameobject3:
sc5.cs
sc6.cs

gameobject1.sc1.onDisable()->gameobject1.sc1.onDestroy()->gameobject3.sc5.onDisable()->

gameobject3.sc5.onDestroy()

[如果按前面的规则的话,应该先执行gameobject3的脚本,但这里不是]

第二种情况:

在同一个对象的不同的脚本上,这两个方法按照脚本

在m_component中的索引按顺序执行的,而且不是成对执行,索引自小到大执行,最早加入的最早调用onDisable()和onDestroy()

gemeobject2.sc3.onDisable()->gameobject2.sc4.onDisable()->

gameobject2.sc3.onDestroy->gameobject2.sc4.onDestroy()

这里这些脚本先依次调用onDisable()才调用onDestroy()。

二、如何自定义多个脚本的执行顺序

划重点:在unity里面可以点击edit->project settings->Script->Execution Order中自定义脚本执行顺序,

当我们没有设置脚本执行顺序时,脚本按照Default Time的标准执行(你可以把unity里面hireachy里面添加对象和在inspector里面添加脚本

视作一个栈,按照先进先出原则,优先执行后添加的对象的先添加的Script。

可以单击+号添加对象到执行列表中

1是脚本的执行顺序,当你的值execution order越小时,越先执行,在default time上方的在执行default time前执行,在default time下方

的在default time后执行

上面的设置,是通过修改每一个脚本对应的meta文件(去自己的代码目录看一下)的excution order来实现的。

三、脚本执行顺序的本质

在我们的场景文件.unity,场景文件是一个YAML文档

每一个脚本对应一个fileid,fileid越小越有先执行

4.运用

如果你的脚本A会用到另一个脚本B中的某一个对象c,为了防止你在B初始化之前去调用c,出现空指针,你必须让脚本B在A之后挂载(这样B就会先初始化),

还有一个很重要的地方,你必须把对象c的初始化写在脚本B的Awake()方法里面,因为start()并不是在初始化就立刻调用的,而是在当前更新一帧时,start()

会在update()第一次调用前调用一次,这样的话如果你把对象c的初始化写在脚本B的start()方法里面,很有可能所有脚本的awake()都跑完了,对象c却没有初始化,

这样就出现了空指针。因此,把对象c的初始化在脚本B的awake()方法,而把调用对象c写在脚本A的start()足够安全

浅谈Unity的脚本执行顺序的更多相关文章

  1. 浅谈循环中setTimeout执行顺序问题

    浅谈循环中setTimeout执行顺序问题 (下面有见解一二) 期望:开始输出一个0,然后每隔一秒依次输出1,2,3,4. for (var i = 0; i < 5; i++) { setTi ...

  2. Unity脚本执行顺序自研框架

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52372611 作者:car ...

  3. unity脚本执行顺序

    Awake ->OnEable-> Start ->-> FixedUpdate-> Update  -> LateUpdate ->OnGUI ->R ...

  4. 浅谈Unity的渲染优化(1): 性能分析和瓶颈判断(上篇)

    http://www.taidous.com/article-667-1.html 前言 首先,这个系列文章做个大致的介绍,题目"浅谈Unity",因为公司和国内大部分3D手游开发 ...

  5. MonoBehaviour Lifecycle(生命周期/脚本执行顺序)

    脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...

  6. [转]Script标签和脚本执行顺序

    Script标签和脚本执行顺序 这里详细聊聊和script标签相关的脚本执行顺序. Script标签的默认行为 几个首要特性: script标签(不带defer或async属性)的会阻止文档渲染.相关 ...

  7. Unity 继承MonoBehaviour脚本 执行顺序 详解

    先看结果 Awake ->OnEnable-> Start ->-> FixedUpdate-> Update  -> LateUpdate ->OnGUI ...

  8. html/css基础篇——link和@inport详解以及脚本执行顺序探讨

    先说一说两者之间的异同 两者都可以引用外部CSS的方式,现在主流浏览器两者都支持(ps:@import是CSS2.1提出的),但是存在一定的区别: 1.link是XHTML标签,除了加载CSS外,还可 ...

  9. unity 脚本执行顺序设置 Script Execution Order Settings

     通过Edit->Project Settings->Script Execution Order打开MonoManager面板  或者选择任意脚本在Inspector视图中点击Execu ...

随机推荐

  1. 学习Echarts:(一)静态图表

    Echarts是现在比较火的js图表库,官网有丰富的实例和友好的入门教程.但是图表的种类很多,配置项的参数也很多,一开始我根据图表类型翻看配置项,发现这样学效率太低了,决定先制定一个简单的学习步骤,按 ...

  2. 使用包时,报 xxx.default is not a function

     最近做了一个导出功能,代码如下 import request from 'request-promise-native'; export default class Form { // 导出 @po ...

  3. CukeTest+Puppeteer的Web自动化测试(一)

    CukeTest+Puppeteer的Web自动化测试 一.初识BDD.Cucumber(黄瓜).CukeTest 行为驱动开发(Behavior Driven Development,BDD).行为 ...

  4. 一个文件搞定Asp.net core 3.1动态页面转静态页面

    最近一个Asp.net core项目需要静态化页面,百度查找了一下,没有发现合适的.原因如下 配置麻烦. 类库引用了第三方类,修改起来麻烦. 有只支持MVC,不支持PageModel. 继承Actio ...

  5. Fabric进阶(三)—— 使用SDK动态增加组织

    在fabric网络运行过程中动态追加新的组织是相当复杂的,网上的资料也十分匮乏,大多是基于first-network这样的简单示例,而且是使用启动cli容器的方法来增加组织,几乎没有针对实际应用的解决 ...

  6. 2020由浅入深最强Java面试题

    1.String,StringBuffer和StringBuilder有什么区别?     String是字符串常量,不可变对象,每次对String修改都等同于生成了一个新的String象,然后将指针 ...

  7. 如何同时关联多个远程仓库,实现一次 push 多站提交(github + gitee)

    这两天做了简陋轮子,主要想放到npm上, Github: canvas-components Gitee: canvas-components github 上一份,gitee 上一份.(走过路过,s ...

  8. [Android应用开发] 01.快速入门

    前言 这一篇,主要是把之前[安卓基础]系列的东西,做一个总结和补充.并举了两个例子:电话拨号器.短信发送器做巩固,在此也参考了黑马训练营的教学大纲. Android项目的目录结构 Activity:应 ...

  9. centos7 在docker下安装mongodb

    第一步:安装 1.1 查找(查看)mongo相应的版本 [root@localhost ~]# docker search mongo INDEX NAME DESCRIPTION STARS OFF ...

  10. Verilog - ABS代码重构

    https://mp.weixin.qq.com/s/-KUviTzO3Hdir_mI57L24g 从形式和语义两个层面,来扣一下ABS这段代码. 目的在于:在不降低通用性.不增加复杂度的情况下,提升 ...