Unity --- 脚本组件 --- 生命周期与执行顺序

1.在unity3D中显示一个物体主要分三步:1.创建游戏对象 2.创建网格 mesh filter(组件)3.添加渲染组件,将网格进行渲染 4.为渲染好的游戏物体添加shader(作色)材质

2.脚本里的类名和脚本的文件名一定要相同


一.脚本的生命周期

脚本从创建到被销毁的全部阶段都称为脚本的生命周期

 实现单例模式就是Awake作为找到唯一对象的静态方法

 Awake和 Start 方法都只会在组件启动的时候调用一次,所以我们可以在这三个方法中的一个实现数据初始化

FixedUpdate 方法是固定时间间隔调用方法,默认时间间隔是0.02秒

1.在Unity脚本中如果想输出文本内容的话不是用console类来执行而是使用Debug类中的Log静态方法来执行输出,例子如下:

注意:!!!!这个方法的字符串中可以是中文,可以是英文,也可以是数字,也可以混用

 2.在Unity运行脚本,调用输出的时候是不会出现命令窗口式的输出的,它是在自己的Console台中进行输出的:

通过点击下面这个感叹号,Unity中的console台就会出现 

一个脚本中的基本方法和执行顺序就在上面那个表中

1.Awake方法会在Unity开始执行程序,挂载到对象上的脚本载入到unity时被调用一次(只要脚本被挂载到对象上,无论这个脚本是否被激活,Unity都会在执行游戏的时候将脚本载入)

如果脚本载入的时候脚本处于开启状态的话,则会在执行了Awake方法后执行OnEnable方法

2.脚本载入后有两个状态(组件也一样),开启和关闭,每开启一次脚本都会调用一次脚本中的OnEnable方法,每关闭一次脚本也都会调用一次OnDisable方法

3.start方法会在脚本被载入且处于开启状态的时候执行一次,后面无论无论我们怎么开关脚本都不会再执行

4.OnDestroy方法会我们将脚本(组件)从对象上移除的时候调用一次。

5.Unity中的脚本逻辑(组件同理):

开始游戏后

一.判断脚本是否挂载到对象上:若挂载了执行第二步;若没挂载,结束。

二.将挂载到对象上的脚本载入到游戏程序中,此时执行一次Awake()方法,并进行判断:脚本在游戏对象上是否处于开启状态,若否的话结束,等待后续操作;若开启了的话执行OnEnable()方法,并执行第三步

三.已知脚本处于开启状态,判断脚本是否是第一次开启,若是的话则执行一次Start()方法,然后执行UpDate类方法,若不是的话则只执行UpDate类方法。

四.脚本在载入到游戏程序后可以自由选择开启或关闭

如果我们选择的是关闭脚本然后载入脚本的话,则脚本只会执行Awake()方法,载入完成后我们再开启脚本,由于是第一次开启就会执行一次OnEnable方法和一次start方法以及后面的update方法

如果选择开启脚本载入则和第三步一样

如果我们将开启的脚本关闭的话,就会执行一次OnDisable()方法,然后再将脚本开启时,由于不是第一次开启,所以不会再执行Start()方法,只会执行OnEnable和Update类方法

五.当我们把脚本(组件)从对象上移除的时候,调用一次OnDsetry()方法


6.Update()类方法

一. Update() --- 每一帧会调用一次这个方法

二.LateUpdate() --- 这个方法必须在Update方法后面实现,然后每调用一次Update方法后就会调用一次LateUpdate()

三.FixedUpdate() --- 这个方法是每隔固定时间后就会被调用一次 --- 默认的时间是0.02s --- 这个默认时间在哪里能够修改呢? --- 在Unity的Edit选项中的Project Setting中选择Time,然后第一个Fixed Timestep(固定时间步进)处修改

Update方法和FixedUpdate区别就是调用方式不同:

Update -- 每一帧调用一次,而1s有多少帧则是与电脑的性能相关的,有的电脑能够1s60帧,有的电脑只能1s30帧

FixedUpdate则只和时间有关,每过一定时间它就会被调用一次

7.console中的collaps(崩溃)按键的作用是将同类输出结果折叠后显示 


第二部分 --- 执行顺序

当有多个脚本同时存在的时候,脚本的执行顺序是怎样的呢?

1.一个脚本a中有一个方法c,一个脚本b中有一个方法d,我们想让方法c先执行,然后再让方法d先执行该怎么呢?

可以将方法c放在脚本a中的Awake()方法中实现,方法d放在脚本b的Start()方法中实现,这样的话,载入时就执行的Awake会先执行,然后载入之后才执行的Start再执行

原理是什么呢?

原理就是Unity中多个脚本的执行顺序:(多线程同步执行)

2.当有多个脚本的时候,会先将所有脚本的Awake()方法同时执行完,然后将所有脚本的Start()同时执行完....接下来依次分析 --- 本质上依然是多线程同步进行

3.在Unity中,每一个脚本都可以看作是一个子线程,当我们开始游戏的时候,这些子线程被一一创建,然后被同步执行

除了上面这种方法以外,Unity为我们提供了手动设置脚本执行顺序的接口:

Excution(执行) order(命令) --- 点击任意一个脚本,在这个脚本的最上面就有

 

 

 在下面点击+号就可以添加脚本,在这个脚本执行顺序自定义窗口中已经有了一些Unity内置的脚本执行了。

脚本的执行顺序是从上到下执行,我们自定义添加的脚本执行时间只能在默认时间之前或之后(负数就是在默认事件之前多少秒,正数就是在默认时间之前多少秒)执行(没有被我们自定义执行顺序的脚本将会在默认时间里多线程同步执行)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值