using Thousandto.Core.Asset; using Thousandto.Core.Base; using Thousandto.Launcher.ExternalLibs; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; namespace Thousandto.Package { /// /// 测试bundle读取,方便确认打出来的bundle是否有效 /// public class CheckSceneLightmap { private const string SCENE_ROOT = "Assets/GameAssets/RawResources/scene"; public static void StartCheck() { EditorUtility.DisplayProgressBar("检查场景Lightingmap", "", 0); var sceneDirs = GetSceneDirs(); for (int i = 0; i < sceneDirs.Length; ++i) { EditorUtility.DisplayProgressBar("检查场景Lightingmap", sceneDirs[i], i / (float)sceneDirs.Length); var lightingDataAssetArray = GetLighingDataAsset(sceneDirs[i]); for (int j = 0; j < lightingDataAssetArray.Length; ++j) { var lightingAssetLen = GetFileSize(lightingDataAssetArray[j]); UnityEngine.Debug.Log("LightingDataAsset size: " + SizeToKbOrMb(lightingAssetLen) + " ---> " + lightingDataAssetArray[j]); } var lightingTexArra = GetLightingTexture(sceneDirs[i]); for (int j = 0; j < lightingTexArra.Length; ++j) { EditorUtility.DisplayProgressBar("检查场景Lightingmap", "优化lightingmap贴图" + sceneDirs[i], i / (float)sceneDirs.Length); CompressTexture(lightingTexArra[j]); } } EditorUtility.ClearProgressBar(); } private static string[] GetSceneDirs() { var sceneDirs = Directory.GetDirectories(SCENE_ROOT); return sceneDirs; } private static string[] GetLighingDataAsset(string sceneDir, string lightingDir = "lightmap") { string lightMapPath = sceneDir + "/" + lightingDir; if (!Directory.Exists(lightMapPath)) return new string[0]; var assetArray = Directory.GetFiles(lightMapPath, "*.asset"); return assetArray; } private static string[] GetLightingTexture(string sceneDir, string lightingDir = "lightmap") { //string lightMapPath = sceneDir + "/" + lightingDir; //if (!Directory.Exists(lightMapPath)) // return new string[0]; var texArray = Directory.GetFiles(sceneDir, "*.exr", SearchOption.AllDirectories); return texArray; } private static long GetFileSize(string file) { long size = -1; if (File.Exists(file)) { FileInfo info = new FileInfo(file); size = info.Length; } return size; } private static string SizeToKbOrMb(float size) { float kb = size / 1024; float mb = kb / 1024; if (mb > 0) return string.Format("{0:#0.00}mb ", mb); return string.Format("{0:#0.00}kb}", kb); } private static void CompressTexture(string file) { TextureImporter importer = TextureImporter.GetAtPath(file) as TextureImporter; importer.textureCompression = TextureImporterCompression.Compressed; TextureImporterSettings ts = new TextureImporterSettings(); importer.ReadTextureSettings(ts); importer.SetTextureSettings(ts); AssetDatabase.ImportAsset(file); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } [MenuItem("Test/CompressTexture")] private static void Test() { var path = AssetDatabase.GetAssetPath(Selection.objects[0]); CompressTexture(path); } } }