private void OnPreprocessTexture() { //去除后缀的资源相对路径,如:Assets/Textures/idle string assetNamePath = assetPath.Substring(0, assetPath.LastIndexOf('.')); //资源文件无后缀的名称 string assetName = assetNamePath.Substring(assetNamePath.LastIndexOf('/') + 1); //.xml绝对路径,如:D:/projects/unity_test/Assets/Textures/idle.xml string xmlPath = s_projectPath + '/' + assetNamePath + ".xml"; if (File.Exists(xmlPath)) { TextureImporter importer = (TextureImporter)assetImporter; //通过反射调用TextureImporter.GetWidthAndHeight私有方法获取纹理的高 object[] parameters = new object[2] { 0, 0 }; MethodInfo methodInfo = importer.GetType().GetMethod("GetWidthAndHeight", BindingFlags.NonPublic | BindingFlags.Instance); methodInfo.Invoke(importer, parameters); int textureHeight = (int)parameters[1]; //切图 SpriteMetaData[] spritesheet = GetSpritesheetData(textureHeight, assetName, xmlPath); //设置导入器属性 importer.textureType = TextureImporterType.Sprite; importer.spriteImportMode = spritesheet.Length > 0 ? SpriteImportMode.Multiple : SpriteImportMode.Single; importer.spritesheet = spritesheet; } }
private string getWarn(TextureImporter importer) { var method = importer.GetType().GetMethod("GetImportWarnings", BindingFlags.Instance | BindingFlags.NonPublic); object obj = method.Invoke(importer, new object[] {}); if (obj == null) { return(""); } else { return(obj.ToString()); } }
private static UnityTexture2D GetTextureToSlice(string path) { TextureImporter ti = AssetImporter.GetAtPath(path) as TextureImporter; MethodInfo method = ti.GetType().GetMethod("GetSourceTextureInformation", BindingFlags.Instance | BindingFlags.NonPublic); var val = method.Invoke(ti, null); SourceTextureInformation info = val as SourceTextureInformation; int width = info.width; int height = info.height; UnityTexture2D tex = AssetDatabase.LoadAssetAtPath <UnityTexture2D>(path); // we want to slice based on the original texture slice. Upscale the imported texture var texture = CreateTemporaryDuplicate(tex, width, height); if (texture != null) { texture.filterMode = tex.filterMode; } return(texture); }