优化策略及生命周期
来源:互联网 发布:帝国cms模板目录 编辑:程序博客网 时间:2024/04/30 02:11
不要使用OnGUI(),它很慢,非常慢。
当需要频繁修改物体的localScale时,移除其collider组件,否则会非常影响帧率。
使用OnBecameVisible()/OnBecameInvisible()配对使用修改enabled属性,使得只有在对象可见时脚本才会执行。
使用InvokeRepeating()代替Update()处理不需要实时的数据更新。
使用对象池GameObjectPool缓存频繁使用的对象。
Unity脚本从唤醒到销毁都有着一套比较完善的生命周期,添加任何脚本都要遵守生命周期法则!
接下来介绍几种系统自调用的重要方法。首先要我们先来说明一下它们的执行顺序:
Awake --> Start --> Update --> FixedUpdate --> LateUpdate -->OnGUI -->Reset --> OnDisable -->OnDestroy
下面我们针对每一个方法进行详细的说明:
1.Awake:用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如GameObject.FindWithTag()这样的函数搜索它们。每个游戏物体上的Awake以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息Awake总是在Start之前被调用。它不能用来执行协同程序。
2.Start:仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。在所有脚本实例中,Start函数总是在Awake函数之后调用。
3.Update:正常帧更新,用于更新逻辑。每一帧都执行,处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。
4.FixedUpdate:固定帧更新,在Unity导航菜单栏中,点击“Edit”-->“Project Setting”-->“Time”菜单项后,右侧的Inspector视图将弹出时间管理器,其中“Fixed
5.LateUpdate:在所有Update函数调用后被调用,和fixedupdate一样都是每一帧都被调用执行,这可用于调整脚本执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。LateUpdate,在每帧Update执行完毕调用,他是在所有update结束后才调用,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。
6.OnGUI:在渲染和处理GUI事件时调用。比如:你画一个button或label时常常用到它。这意味着OnGUI也是每帧执行一次。
7.Reset:在用户点击检视面板的Reset按钮或者首次添加该组件时被调用。此函数只在编辑模式下被调用。Reset最常用于在检视面板中给定一个默认值。
8.OnDisable:当物体被销毁时 OnDisable将被调用,并且可用于任意清理代码。脚本被卸载时,OnDisable将被调用,OnEnable在脚本被载入后调用。注意: OnDisable不能用于协同程序。
9.OnDestroy:当MonoBehaviour将被销毁时,这个函数被调用。OnDestroy只会在预先已经被激活的游戏物体上被调用。注意:OnDestroy也不能用于协同程序。
备注:
协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可开启一个协同程序,也就是说该方法必须在MonoBehaviour或继承于MonoBehaviour的类中调用。
- 优化策略及生命周期
- 搜索策略及优化
- Hive 简介及优化策略
- 索引使用策略及优化
- Oracle Index 索引介绍 及 优化策略
- memcpy内存拷贝及优化策略图解
- Spark-SQL介绍及优化策略
- B-Tree索引及索引优化策略
- 优化策略
- 浅谈服务器性能测试的全生命周期——从测试、结果分析到优化策略
- 浅谈服务器性能测试的全生命周期——从测试、结果分析到优化策略
- 浅谈服务器性能测试的全生命周期——从测试、结果分析到优化策略
- 浅谈服务器性能测试的全生命周期——从测试、结果分析到优化策略
- 浅谈服务器性能测试的全生命周期——从测试、结果分析到优化策略
- 记一次因fragment生命周期产生的bug及优化
- 搜索引擎优化(SEO)基本技术及策略
- FastDFS文件名策略及对小文件的优化
- Hibernate学习文档_缓存及优化策略
- 装有支付宝的手机丢了可咋办
- UVA11020 Efficient Solutions
- QT程序编译错误与解法汇总
- Redhat修改主机名及网络配置
- Android中Path类的lineTo方法和quadTo方法画线的区别
- 优化策略及生命周期
- apache 允许局域网访问设置
- 设计模式六大原则(4):接口隔离原则ISP(Interface Segregation Principle)
- MySQL 5.6 忘记root密码怎么办!!!淡定
- 深入理解数组,内存中的数组
- vs2012的项目怎么在vs2010中打开
- C++ string查找示例
- Tiny6410 简单的LED字符设备驱动
- Effective C++读书笔记