Unity3D 查找Update函数体为空的类

如果是大项目,有很多Update空跑还是多少有些效率损耗,那我们就把他们都找出来。

先引用Mono.Cecil

//代码

using UnityEngine;
using UnityEditor;
using System.Collections;
using System.IO;
using System.Collections.Generic;
using System.Text;

//处理UILabel
public class EmptyUpdateCleaner
{

	[MenuItem("Tools/Log Empty Update")]
	public static void Test()
	{
		string log = "";
		var module = Mono.Cecil.ModuleDefinition.ReadModule(Application.dataPath+ "/../Temp/UnityVS_bin/Debug/Assembly-CSharp.dll");
		foreach (var type in module.Types)
		{
			if (null==type.BaseType)
			{
				continue;
			}

			if (!type.BaseType.Name.Contains("MonoBehaviour"))
			{
				continue;
			}

			foreach (var method in type.Methods)
			{
				if (method.Name.Equals("Update"))
				{
					if (method.Body.Instructions.Count <= 2)
					{
						log += type.Name + "."+method.Name + "\n";
					}
				}
				else if (method.Name.Equals("LateUpdate"))
				{
					if (method.Body.Instructions.Count <= 2)
					{
						log += type.Name + "." + method.Name + "\n";
					}
				}
				else if (method.Name.Equals("FixedUpdate"))
				{
					if (method.Body.Instructions.Count <= 2)
					{
						log += type.Name + "." + method.Name + "\n";
					}
				}
			}
		}
		Debug.Log(log);
	}

}

  

时间: 2024-10-06 20:38:54

Unity3D 查找Update函数体为空的类的相关文章

模板与继承之艺术——空基类优化

1.概念 C++中有“空”类的概念,这就意味着在运行期间其内部不好任何内存. 只包含类型的成员函数.非虚成员函数和静态数据成员的类为空类. 非静态的数据成员,虚函数和虚基类则在运行时期消耗存储空间. 2.空基类优化如下: #include<iostream> using namespace std; class Empty{ typedef int Int; }; class EmptyToo : public Empty {}; class EmptyThree : public Empty

Unity3D游戏开发之详解 Animation类和Animator类

Unity3D游戏开发之详解 Animation类和Animator类 Animation类 animation组件用于播放动画.可以指定动画剪辑到动画组件并从脚本控制动画播放.在Unity的动画系统基于权重并且支持动画融合,叠加动画,动画混合,标签和完全控制动画播放的各个方面. 如果想播放一个简单的动画,可以使用Animation.Play:如果想在动画之间交叉淡入,可以使用Animation.CrossFade:如果想改变动画模式(循环,一次,乒乓),可以改变动画导入设置里面的动画帧的Wra

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

Unity3D中Update()与FixedUpdate()的区别是什么呢?从字面上理解,它们都是在更新时会被调用,并且会循环的调用.但是Update会在每次渲染新的一帧时,被调用.而FixedUpdate会在每个固定的时间间隔被调用,那么要是Update 和FixedUpdate的时间间隔一样,是不是就一样呢?答案是不一定,因为Update受当前渲染的物体,更确切的说是三角形的数量影响,有时快有时慢,帧率会变化,update被调用的时间间隔就发生变化.但是FixedUpdate则不受帧率的变化

Unity3d中Update()方法的替身

在网上看到一些资料说Unity3d的Update方法是如何如何不好,影响性能.作为一个菜鸟,之前我还觉得挺好用的,完全没用什么影响性能的问题存在.现在发现确实有很大的问题,我习惯把一大堆检测判断放在Update中去执行,这种检测判断每帧都在执行,而往往其中的方法可能只执行一次或几次,这样确实对性能有很大的影响. 下面这种是我经常使用的写法: [javascript] view plaincopyprint? function Update () { if (!wait) { transform.

空基类优化empty base class optimization

1.为什么C++中不允许类的大小是0 class ZeroSizeT {}; ZeroSizeT z[10]; &z[i] - &z[j]; 一般是用两个地址之间的字节数除以类型大小而得到的,而类型大小是0将会出问题 2.为什么有时多个类组成实例所占空间都是一样的 class Empty { }; class EmptyToo : public Empty { }; class EmptyThree : public EmptyToo { }; sizeof(Empty) : 1 size

Unity3D 单例(singleton)管理类

在Unity3D中,有什么好的方法去创建一个单例游戏管理类,可以像一个全局类的静态变量一样到处访问? 在Unity中有什么接口吗?我是否要把这个脚本添加到一个物体上呢?这个类可以仅仅放在文件夹里不用添加到场景里吗? 通常来说视情况而定,常用的两种单例类. (1)组件式的添加在物体上. (2)不从MonoBehaviour继承的独立类. public class MainComponentManger { private static MainComponentManger instance; p

判空工具类——Java

代码 import java.util.Collection; /** * 判空工具类 */ public class EmptyUtil { /** * 判断字符串是否为空,长度为0被认为是空字符串. * * @param str * @return */ public static boolean isEmpty(String str) { if (str != null) { return str.trim().length() == 0; } else { return true; }

Unity3D 在Update中不要过多地修改Transform 信息

前文说到碰撞检测时候,不要在Update内部尝试移动GameObject 来检查碰撞检测,这样是徒劳无功.但是 说到 因为你移动的过程中其实并没有将实际的移动位置更新到物理引擎,只是做了个缓存而已, 只有在调用FixedUpdate的内部函数(物理引擎处理)时,才会将最新的位置设置到物理引擎上,甚至是渲染引擎也使用最新的位置. 其实是有问题的,因为我发现每次移动都会导致 碰撞器不断更新 下面是测试代码: int TEST = 0; // Returns true if you were able

Unity3D的update和FixedUpdate

Update() 和 FixedUpdate()是unity3d的循环执行函数: 区别是循环周期不同: Update()是渲染每一帧,执行一次. FixedUpdate()是固定时间间隔执行一次. LateUpdate()是所有Update()执行完才执行(多脚本加载). 这里补充说明一下程序函数的执行顺序请参考以下文章: http://www.cnblogs.com/ysdyaoguai/p/3746828.html?utm_source=tuicool&utm_medium=referral