避免频繁调用GameObject.SetActive

  昨天又从主程那学到一招Unity+NGUI性能优化方法。我们游戏的某些逻辑会在一帧内频繁调用GameObject.SetActive,显示或隐藏一些对象,数量达到一百多次之多。这类操作的CPU开销很大(尤其是NGUI的UIWidget在激活的时候会做很多初始化工作),而且会触发大量GC。后来我们改变了显示和隐藏对象的方法——让对象一直保持激活状态(activeInHierarchy为true),而原来的SetActive(false)改为将对象移到屏幕外,SetActive(true)改为将对象移回屏幕内。这样性能就好多了。

附:Unity+NGUI性能优化方法总结

时间: 2024-08-22 22:22:04

避免频繁调用GameObject.SetActive的相关文章

mixare的measureText方法在频繁调用时抛出“referencetable overflow max 1024”的解决方式

这几天在搞基于位置的AR应用,採用了github上两款开源项目: mixare android-argument-reality-framework 这两个项目实现机制大致同样.我选取的是android-argument-reality-framework.原因是我觉得他的代码结构要清晰非常多(纯属个人意见). 这两个项目的demo在执行时都会crash,通过查看控制台,能够看到例如以下信息: 07-31 14:35:38.685: W/dalvikvm(13686): ReferenceTab

使用ViewPager切换Fragment时,防止频繁调用OnCreatView

使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPagerAdapter的源码,发现两个关键的地方 1 @Override 2 public Object instantiateItem(ViewGroup container, int position) { 3 if (mCurTransaction == null) { 4 mCurTransa

Unity GameObject.activeSelf, GameObject.activeInHierarchy,GameObject.SetActive和SetActiveRecursively

activeSelf(read only只读):物体本身的active状态,对应于其在inspector中的checkbox是否被勾选activeInHierarchy(read only只读):物体在层次中是否是active的.也就是说要使这个值为true,这个物体及其所有父物体(及祖先物体)的activeself状态都为true. 一个物体要在场景中是可见的(不是隐藏的),那么不仅仅其本身的activeSelf要为true,其所有父物体(及祖先物体)的activeself状态都要为true.

【Unity】使用RenderTexture为物体生成快照

版权声明:本文为博主原创文章,未经博主允许不得转载. 作者:Jimm          邮箱:[email protected] RenderTexture的定义和作用 RenderTexture are textures that can be rendered to. RenderTexture(下文简称RTT)是可以被渲染的纹理,简称渲染纹理.一般来说,RTT可以应用在制作动态阴影,反射以及监视摄像机(车辆后视镜)等,另一方面可以应用到游戏截图,背景模糊等方面,用途十分广泛.以后这些技术都

react native onEndReached频繁多次调用问题

今天被这个问题搞得头疼,写一个分页加载,但是listview的onEndReached方法老是被频繁调用,知道加载完所有的分页数据才停止. <ListView automaticallyAdjustContentInsets = {false} contentOffset = {{x:0,y:0}} enableEmptySections={true} dataSource={this.state.dataSourceModel} renderRow={this.renderRowModel.b

Unity3D_01_各种寻找GameObject方法

1.GameObject.Find(): 寻找Hierarchy面板中的activie 不为false的游戏对象: 路径如官方事例写法: public class ExampleClass : MonoBehaviour { public GameObject hand; void Example() { hand = GameObject.Find("Hand"); hand = GameObject.Find("/Hand"); hand = GameObjec

Unity3d gameObject

using UnityEngine; using System.Collections; public class test : MonoBehaviour { //print只能在MonoBehavior的子类中使用,否则只能使用Debug.log() public int age; public string name; //每当脚本被加载时调用:“有添加脚本即调用,哪怕该脚本没有激活” void Awake(){ //通常在awake中 初始或public成员 print("awake&q

unity3d 常用的指令SetActive()、renderer .enabled 、collider.enabled

用Unity3d 时会隐藏一个物体,经常用到如下的命令,解释一下自己对一下3行代码的理解 private GameObject cub; cub.gameObject.SetActive(true);类似下图圈出的,类似直接删除这个物体的存在,让它一切的属性隐藏. cub.renderer .enabled = true ;这个代码是隐藏渲染,就是起到一个隐身的作用,其他的属性都在. cub.collider.enabled  = true  ;这个是对碰撞体属性的配置,和下图圈出的操作等同.

Input gameobject vector3 c#

Input类中的常用方法 bool w=Input.GetKey(KeyCode.W);//检测是否按下键盘W Input.GetKeyDown(KeyCode.W);//表示检测按下时 Input.GetKeyUp(KeyCode.W);//表示检测按键弹起时 Input.GetMouseButton(0);//参数0表示左键,1表示右键,2表示中键 //GetMouseUp和GetMouseDown的方法与键盘的原理类似 if (Input.GetKeyDown("space"))