在网上看到一些资料说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. setValuesForKeysWithDictionary 的用法

    字典的快速赋值 setValuesForKeysWithDictionary 字数918 阅读6604 评论6 喜欢32 前言 在学习解析数据的时候,我们经常是这么写的:PersonModel.h文件 ...

  2. 使用id名称和name直接获取元素

    我们知道一些第三方的js库对如何快速选取html中的元素做了一些简化,貌似十分高深莫测,其实也不然.而且js本身自带了对于特殊元素的简便选取的方法,下面就为大家简单介绍下. 在html中,一般最直接的 ...

  3. 解决程序出现“terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted (core dumped)”的问题

    最近跑程序时出现了这么一个问题: terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_al ...

  4. Xamarin Mono 环境搭建(使用Visual Studio 2013 开发android 和 ios )

    本文主要介绍Xamarin结合VS2013来开发Android应用程序,主要会介绍Mono和Xamarin的关系,以及整个搭建环境的过程. 一.Mono和Xamarin介绍 1.Mono简介 Mono ...

  5. 转:亿级Web系统的高容错性实践(好博文)

    亿级Web系统的高容错性实践 亿级Web系统的高容错性实践 背景介绍 大概三年前,我在腾讯负责的活动运营系统,因为业务流量规模的数倍增长,系统出现了各种各样的异常,当时,作为开发的我,7*24小时地没 ...

  6. UISegmentedControl 控件

    一.创建 UISegmentedControl* mySegmentedControl = [[UISegmentedControl alloc]initWithItems:nil]; 是不是很奇怪没 ...

  7. Git 在团队中的最佳实践--如何正确使用Git Flow[转]

    原文地址:http://www.cnblogs.com/cnblogsfans/p/5075073.html Git的优点 Git的优点很多,但是这里只列出我认为非常突出的几点. 由于是分布式,所有本 ...

  8. Java 压缩字符串

    1.引言 最近在做项目中,平台提供一个http服务给其他系统调用,然后我接收到其他系统的json格式的报文后去解析,然后用拿到的数据去调用corba服务,我再把corba的返回值封装完成json字符串 ...

  9. JAVA XML

    为什么要用XML:1各平台之间程序很难直接交流 2各程序之间交换数据 xml定义  可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据 ...

  10. IP地址子网掩码主机地址网络号主机号

    (1)子网掩码1所对应的位为网络号位 而所对应的位为主机号位 IP地址+子网掩码=网络号: IP地址+子网掩码(反码)=主机号. (2)主机号中的m位被用来表示网络号了,也就是子网号,将0-255划分 ...