[入门教程] Unity3d脚本执行顺序

发表于2015-07-22
评论0 2.9k浏览
 

1401.jpg (46.02 KB, 下载次数: 2)

下载附件  保存到相册

生命周期执行顺序图

2014-10-14 13:25 上传


脚本生命周期---方法执行顺序
无论哪个游戏对象上的脚本,最终都会按照生命周期顺序合并到一起执行,注意:执行顺序不依赖于添加顺序
  1.Prefab(预设)Instantiate(实例化):预设对象,被创建后,在编辑状态下,得到一个实例后,依次执行以下方法:
1.1--Awake(唤醒):一般完成禁用启用的功能,最少执行一次,
1.2--OnEnable():在Start()之前,在Awake()和OnEnable()之间对当前脚本禁用设置,如果在Awake()中执行启用,就会执行OnEnable()方法,如果禁用就不会执OnEnable()方法,直接执行Start()方法。
1.3--Start()方法:当Start执行完成,脚本中的值就会完成了初始化操作,
Start()不是每次都会执行,如果Start()执行过了就不会执行,如果没有执行就会执行一次,如:当我们玩游戏时暂停,在执行时就不会执行Start();
Start()执行完后,就会出现两个分支:FixedUpdate()和Update();
Update()和LateUpdate():这两者都是一个分支上的,都表示一帧执行一次,都可以使用线程统一管理
不同点:在Update()执行完成后会执行LateUpdate(),如果做得是第三人称摄像机跟随,建议使用LateUpdate(),一般第一人称或其他效果就用Update()就可以。
1.4--Animations位于Update和LateUpdate()之间,一般第三人称就会拍到主角的动画,在执行Update()的时候,Anmiations还没执行,在这里有一个概念就是,我们这一帧看到的主角的动作其实是上一帧看到的主角的动作其实是上一帧的动作,如果做第三人称的动画,建议使用LateUpdate();
2--Conroutin(协同操作)
yield(从本质上理解就是直接等待)
yieldWaitForSeconds(s):等待多少秒
yieldWaitForFixedUpdate():等待FixedUpdate()执行完毕。
yiield  WWW():等待一个资源访问请求
yieldStartCoroutine(MyFunc):等待另外一个函数被调用完成
3--Rendering(渲染):在协同操作等到资源后执行Rendering(渲染操作)
OnpreCull():把看不到或不需要显示的东西去除,只渲染看到的(提高性能优化)
OnBecameVisible/OnBecameinVisible():摄像机进入视野(由看不到到看到/看到到看不到)
OnWillRenderObject():进入视野后将要渲染,进行渲染初始化
OnPreRender():在渲染之前先预渲染,如:材质,资源调度到内存中
OnRenderObject():正式渲染
OnPostRender():将要渲染的东西组织好扔到渲染管线当中,交给显卡进一步进行渲染
OnRenderimage(Pro only):渲染图片 (Pro only):只有专业版的unity才能运行这个函数
OnGUI():把当前场景所有的游戏对象都渲染完了最后才渲染这些GUI界面,在这里,一帧最少执行两次或多次,这一帧在这里做了两件事,1.布局:(先擦掉再重新布局)2.重绘(repaint)(重新绘制本身)
注意:在渲染阶段,GUI是可控的,Rendering是不可控的,想要可控就得使用OpenGL
OnDrawGizmos():在操作中基本上不用,它的作用是在开发过程中帮助我们辅助智能提示,在scene场景中看到。
 
Quitting():退出阶段
  1.OnDisable():禁用/暂停,不是真销毁
  2.OnDestory():销毁

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引