zoukankan      html  css  js  c++  java
  • Unity3d脚本执行顺序详解

    欢迎来到unity学习unity培训、unity企业培训教育专区,这里有很多U3D资源U3D培训视频U3D教程U3D常见问题U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。

    在调用脚本的时候遇到下面报错情况:

    NullReferenceException: Object reference not set to an instance of an object

    意思就是:未将对象引用设置到对象的实例
    脚本内部的 Start()函数并不能作为构造的形式,因为在同一个对象身上会出现 两个Start()无法同步的现象。
    例如在 A对象身上挂接  B和C两个脚本,B脚本的Start()函数调用C脚本,

    此刻C脚本对象可能已经创建成功但是C脚本的Start()并不一定已经执行,

    并不是像构造函数一样,如果对象创建成功那么构造函数一定执行完毕。

    发布时期更容易凸显此问题,报错:此对象没有赋值给物体。

    A 单个脚本身上的顺序

    所以就说下脚本的执行顺序机制吧

    1 Awake() 脚本实例被载入时被调用,整个生命周期,只会执行一次
    2 Start()在Update()函数第一次调用前被调用,整个生命周期中只被调用一次
    3 Update()  在每一帧调用
    4 FixedUpdate() 放置游戏基本物理行为代码的地方,每一帧调用
    5 OnGUI() 每帧调用好几次(每个事件一次),GUI显示函数只能在OnGui中调用
    一般都是在Awake函数中创建游戏对象,然后在Start函数中获取游戏对象或游戏组件

    在这其中还有其他的函数,暂时不多解释

    B 多个脚本身上的顺序

    但是这些函数是 连同 不同脚本先后执行
    把一个对象身上的脚本连起来好像一个链表
    链表1(A脚本 Awake(),B脚本 Awake()…)
    链表2(A脚本 Update(),B脚本 Update()…)

    C 注意事项

    脚本是按照添加顺序进行创建执行
    如果你的脚本先创建了,去GetComponent<另一个脚本>
    很显然这样会报错,说:NullReferenceException: Object reference not set to an instance of an object
    所以 要注意顺序。(这个很蛋疼的说)

    D 强制修改脚本执行顺序

    这么多脚本都考虑执行顺序很蛋疼,所以unity3d给予了一个可以强制设置脚本执行顺序的方法

    修改方法如下:

    Unity3d 版本4.6
    Edit—Projected Settings—Script Exectuion Order
    在右侧 Inspector 面板 有Default Time 设置 点击+号来设置顺序

    更多精彩请点击 http://www.gopedu.com/

  • 相关阅读:
    Spring Boot启动时执行初始化操作三种方法分享
    springboot自定义验证传值范围
    动态数据源玩起来
    多线程之Semaphore登录限流示例
    elementui表格自定义格式实现原理???
    31 Days of Windows Phone | Day #5 System Theming
    SQL 子查询关联查询和非关联查询 性能分享
    windows phone app 发布后在市场里找不到呢。
    APP Hub 应用发布失败,请问大家都是怎么设置可以成功提交哦
    WPF:Main方法到哪里去了?
  • 原文地址:https://www.cnblogs.com/Unity3Dqishituan/p/4060169.html
Copyright © 2011-2022 走看看