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);
	}

	
	
}

  

posted @ 2016-05-26 11:23  MrBlue  阅读(876)  评论(0编辑  收藏  举报