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;
        }
    }
Ejemplo n.º 2
0
    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());
        }
    }
Ejemplo n.º 3
0
    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);
    }