在网上看到一些资料说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()方法的替身的更多相关文章

  1. Unity3D中Update()与FixedUpdate()的区别

    Unity3D中Update()与FixedUpdate()的区别是什么呢?从字面上理解,它们都是在更新时会被调用,并且会循环的调用.但是Update会在每次渲染新的一帧时,被调用.而FixedUpd ...

  2. Unity3D中Update和Lateupdate的区别

    Unity中Update和Lateupdate的区别.Lateupdate和Update每一祯都被执行,但是执行顺序不一样,先执行Updatee然后执行lateUpdate. 如果你有两个脚本JS1. ...

  3. unity3d中dllimport方法的使用,以接入腾讯平台为例!!!

    说到有关dllimport方法可能还有很多人比较陌生,其实我自己也说不太清楚,大概说说什么时候要用它. 事实上功能类似于调用android的第三包,我们想要使用苹果上特定的api或者第三方平台的一些东 ...

  4. oracle中Update方法

    1.两表(多表)关联update -- 被修改值由另一个表运算而来 update customers a set city_name=(select b.city_name from tmp_cust ...

  5. Cocos2d-swift V3.x 中的update方法

    在cocos2d V3.x中update方法如果实现,则会被自动调用;不用向早期的版本那样要显式schedule. 但是你还是要显式schedule其他方法或blocks使用node的schedule ...

  6. Cocos2d中update与fixedUpdate的区别(六)

    它如何工作呢? update:和fixedUpdate:方法实际这样工作. Cocos2D将从iOS接口中取得时间间隔(delta)在你的游戏代码执行期间,并且检查fixedUpdate:方法在间隔期 ...

  7. MongoDB中insert方法、update方法、save方法简单对比

    MongoDB中insert方法.update方法.save方法简单对比 1.update方法 该方法用于更新数据,是对文档中的数据进行更新,改变则更新,没改变则不变. 2.insert方法 该方法用 ...

  8. hibernate中保存一个对象后再设置此对象的属性为什么不需要调用update方法了

    hibernate中保存一个对象后再设置此对象的属性为什么不需要调用update方法了 例如session.save(user);user.setAge(20); 原因: hibernate对象的三种 ...

  9. Unity3D中C#和js方法相互调用

    通过查找资料,Unity3D中C#和js要相互调用彼此的方法,js文件必须放在"Standard Assets". "Pro Standard Assets" ...

随机推荐

  1. 去除inline-block元素间间距的N种方法

    这篇文章发布于 2012年04月24日,星期二,22:38,归类于 css相关. 阅读 147771 次, 今日 52 次 by zhangxinxu from http://www.zhangxin ...

  2. 03 Apache Solr: 安装和运行

         前面介绍了Solr在项目中的使用和构建高度可用.高度可扩展的Solr服务器的一些想法.但是光说不练假把式,现在开始,把Solr运行起来继续深入了解吧! 安装 安装JAVA Apache So ...

  3. Python3利用BeautifulSoup4抓取站点小说全文的代码

    再写一个用BeautifulSoup抓站的工具,体会BeautifulSoup的强大. 根据小说索引页获取小说全部章节内容并在本地整合为小说全文.不过不是智能的,不同的站点对代码需要做相应的修改. # ...

  4. JMeter - 参数化

    方法一:使用"函数助手"添加从文件中读取参数的函数 (a)__StringFromFile函数:[读取整行数据]1.新建参数文件:

  5. Oracle 分页原理

    oracle rownum 及分页处理的使用方法 在实际应用中我们经常碰到这样的问题,比如一张表比较大,我们只要其中的查看其中的前几条数据,或者对分页处理数据.在这些情况下我们都需要用到rownum. ...

  6. HTML5实现摇一摇

    一.原理: 利用devicemotion获取移动速度,得到device移动时相对之前某个时间的差值比 二.效果图: 三.源码: //先判断设备是否支持HTML5摇一摇功能 if (window.Dev ...

  7. sandy bridge

      SANDY BRIDGE SPANS GENERATIONS Intel Focuses on Graphics, Multimedia in New Processor Design By Li ...

  8. 哈哈,修改PHP5.4.44语法成功

    作为一个脚本语言,面向对象的继承基本上不想用到,强类型比较也想使用==直接比较.作为专业程序员不想让PHP解释器代劳过多. 修改了这个MOD版本,效果杠杠的.

  9. android中回调函数机制完全解析

    1.在要调用的业务操作中,创建一个接口,在接口中创建方法,这个方法表示的是我们原先要在业务类中执行的操作 public interface BackUpSmsListener { /** * 设置总进 ...

  10. RHEL7.2

    在RHEL7.2中,通过以下命令设置开机进入图形界面或者命令行界面: systemctl set-default graphical.target #设置开机默认进入图形界面 systemctl se ...