码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3d中Update()方法的替身

时间:2015-01-05 18:32:35      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

      在网上看到一些资料说Unity3d的Update方法是如何如何不好,影响性能。作为一个菜鸟,之前我还觉得挺好用的,完全没用什么影响性能的问题存在。现在发现确实有很大的问题,我习惯把一大堆检测判断放在Update中去执行,这种检测判断每帧都在执行,而往往其中的方法可能只执行一次或几次,这样确实对性能有很大的影响。

      下面这种是我经常使用的写法:

[javascript] view plaincopyprint?
function Update () { 
 if (!wait) { 
 transform.Translate(Vector3.forward * Time.deltaTime); 
 } 
 else if (Time.time >= timer) { 
 wait = false; 
 } 
 if (Input.anyKeyDown) { 
 wait = true; 
 timer = Time.time + 1.0; 
 } 
} 

  其实我们完全可以这么写:

[javascript] view plaincopyprint?
function Start () { 
 while (true) { 
 transform.Translate(Vector3.forward * Time.deltaTime); 
 if (Input.anyKeyDown) { 
 yield WaitForSeconds(1.0); 
 } 
 yield; 
 } 
} 

  这样简单明了,而且不影响性能。下面是我摘自网上的一段代码,使用coroutine替换update方法的例子:

[csharp] view plaincopyprint?
using UnityEngine; 
using System.Collections; 
/// 
/// Thinkgear user interface help message. 
/// 
/// By chiuan 2012.8.18 
/// 
public class ThinkgearUIHelpMessage : MonoBehaviour { 
 //the time gap that need to disable the component . 
 const float _TimeToDisable = 0.2f; 
 bool isNeedToDisable = false; 
 
 
 #region for other call message or invoke. 
 
 public void UnActiveObject() 
 { 
 isNeedToDisable = true; 
 StartCoroutine("StartCheckDisable"); 
 } 
 
 public void ActiveObject() 
 { 
 if(isNeedToDisable == true) 
 { 
 //because this means the coroutine has started. 
 //than u need to stop it,if u wanna active this . 
 StopCoroutine("StartCheckDisable"); 
 } 
isNeedToDisable = false; 
 } 
 
 #endregion 
 IEnumerator StartCheckDisable() 
 { 
 yield return new WaitForSeconds(_TimeToDisable); 
 if(isNeedToDisable) 
 { 
 gameObject.SetActiveRecursively(false); 
 } 
 } 
} 

 

Unity3d中Update()方法的替身

标签:

原文地址:http://www.cnblogs.com/heke-share-space/p/4204057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!