List <GameObject> GetAllGameObjectsInScene() { List <GameObject> allGameObjects = new List <GameObject>(); foreach (GameObject root in MemoryStat.GetAllRootGamObjects()) { GetAllChildren(allGameObjects, root); } return(allGameObjects); }
void CheckMemories() { if (_memoryStat == null) { _memoryStat = new MemoryStat(); } _memoryStat.DoStat(true); long texturesMemories = _memoryStat.CalcTextureMemories(); long meshesCombinedMemories = _memoryStat.CalcMeshesCombinedMemories(); long meshesUncombinedMemories = _memoryStat.CalcMeshesUncombinedMemories(); long totalMemories = _memoryStat.CalcTotalMemories(texturesMemories, meshesCombinedMemories, meshesUncombinedMemories, 0); Debug.Log("场景总内存/Mesh占用/贴图占用: " + MemoryStat.GetMemoriesString(totalMemories) + "/" + MemoryStat.GetMemoriesString(meshesCombinedMemories + meshesUncombinedMemories) + "/" + MemoryStat.GetMemoriesString(texturesMemories) + "。 详情请运行场景内存统计工具查看!"); }
void OnGUI() { //_memoryStat._rootGo = EditorGUILayout.ObjectField("Root Object", _memoryStat._rootGo, typeof(GameObject), true) as GameObject; if (GUILayout.Button("Start")) { _memoryStat.DoStat(true); } long texturesMemories = _memoryStat.CalcTextureMemories(); long meshesCombinedMemories = _memoryStat.CalcMeshesCombinedMemories(); long meshesUncombinedMemories = _memoryStat.CalcMeshesUncombinedMemories(); long animationClipsMemories = _memoryStat.CalcAnimationClipsMemories(); long totalMemories = _memoryStat.CalcTotalMemories(texturesMemories, meshesCombinedMemories, meshesUncombinedMemories, animationClipsMemories); GUILayout.Label("估计总内存:" + MemoryStat.GetMemoriesString(totalMemories)); GUILayout.Label("贴图占用:" + MemoryStat.GetMemoriesString(texturesMemories)); GUILayout.Label("Mesh占用:" + MemoryStat.GetMemoriesString(meshesCombinedMemories + meshesUncombinedMemories) + " (其中未合并Mesh占用:" + MemoryStat.GetMemoriesString(meshesUncombinedMemories) + ")"); // GUILayout.Label("动画占用:" + MemoryStat.GetMemoriesString(animationClipsMemories)); _currentPage = GUILayout.Toolbar(_currentPage, _inspectToolbarStrings); switch (_currentPage) { case 0: GUILayout.Label("(显示格式 —— 贴图名: 占用内存大小)"); ListTextures(); break; case 1: GUILayout.Label("(以下为合并mesh信息 显示格式 —— Mesh名: 占用内存大小/总顶点数/使用次数)"); ListMeshes(); break; /* * case 2: * GUILayout.Label("(显示格式 —— 动画名: 占用内存大小)"); * ListAnimationClips(); * break; */ } }
private void ListTextures() { _textureListScrollPos = EditorGUILayout.BeginScrollView(_textureListScrollPos); var dicSort = from objDic in _memoryStat._activeTextures orderby objDic.Value descending select objDic; foreach (KeyValuePair <Texture, int> kvp in dicSort) { EditorGUILayout.BeginHorizontal(); GUILayout.Label(kvp.Key.name, GUILayout.Width(300)); GUILayout.Label(MemoryStat.GetMemoriesString(kvp.Value), GUILayout.Width(100)); if (GUILayout.Button("定位", GUILayout.Width(50))) { Selection.objects = new Object[] { kvp.Key } } ; EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndScrollView(); }
private void ListMeshes() { _meshListScrollPos = EditorGUILayout.BeginScrollView(_meshListScrollPos); var dicSort = from objDic in _memoryStat._meshesCombined orderby objDic.Value.memorySize descending select objDic; foreach (KeyValuePair <Mesh, MemoryStat.MeshInfo> kvp in dicSort) { EditorGUILayout.BeginHorizontal(); GUILayout.Label(kvp.Key.name, GUILayout.Width(300)); GUILayout.Label(MemoryStat.GetMemoriesString(kvp.Value.memorySize) + "/" + kvp.Value.verticesTotal + "/" + kvp.Value.usedCount); GUILayout.FlexibleSpace(); if (GUILayout.Button("定位", GUILayout.Width(50))) { Selection.objects = new Object[] { kvp.Key } } ; EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndScrollView(); }
void InitData() { _memoryStat = new MemoryStat(); }