说明:
图来自官方文档,测试时有点出入
无论是可见物体还是相机的OnRenderObject都是在相机的OnPostRender之后执行
OnPreCull,OnPreRender,OnPostRender,OnPostRender,OnRenderImage这几个go上有相机才执行
OnRenderObject 任何激活go都执行,场景中同时有camera和可见go这个函数会在OnPostRender后执行
OnBecameVisible 针对可见go(包含渲染器并激活的go),只要脚本挂上,并实现这个方法,就执行(脚本前面的勾被勾掉时也执行)一次,
如果有相机执行位置是在相机的OnPreCull之后,OnPreRender之前执行
OnWillRenderObject 可见go执行(相机go是不执行的,估计因为不可见),
如果2个相机,1个可见go,go上脚本写了这个,
那么这个函数在一次循环中执行2次(一次循环中对每一个相机都执行一次),而且每次循环都会执行
具体位置在相机的OnPreCull后 相机的OnPreRender前
渲染
- OnPreCull: 在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除之前。
- OnBecameVisible/OnBecameInvisible: 在对象对于相机可见/不可见时调用此函数。
- OnWillRenderObject: 如果对象可见,则为每个相机调用一次此函数。
- OnPreRender: 在相机开始渲染场景之前调用此函数。
- OnRenderObject: 在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
- OnPostRender: 在相机完成场景渲染后调用此函数。
- OnRenderImage(仅限专业版): 在完成场景渲染后调用此函数,以便对屏幕图像进行后处理。
- OnGUI: 在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和 keyboard/鼠标事件。
- OnDrawGizmos 用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的。
参考资料:
1.Execution Order of Event Functions http://docs.unity3d.com/Manual/ExecutionOrder.html2.游戏蛮牛Unity 用户文档1.0 http://www.unitymanual.com/m/Manual/index.htm