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 设置 点击+号来设置顺序




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值