Beispiel #1
0
        private static List <Vector2[]> Load(SerializedObject importer, SpriteImportMode mode, int index)
        {
            var outlineSP = mode == SpriteImportMode.Multiple ?
                            importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index).FindPropertyRelative("m_PhysicsShape") :
                            importer.FindProperty("m_SpriteSheet.m_PhysicsShape");

            var outline = new List <Vector2[]>();

            if (outlineSP.arraySize > 0)
            {
                var outlinePathSP = outlineSP.GetArrayElementAtIndex(0);
                for (int j = 0; j < outlineSP.arraySize; ++j, outlinePathSP.Next(false))
                {
                    var o = new Vector2[outlinePathSP.arraySize];
                    if (o.Length > 0)
                    {
                        var psp = outlinePathSP.GetArrayElementAtIndex(0);
                        for (int k = 0; k < outlinePathSP.arraySize; ++k, psp.Next(false))
                        {
                            o[k] = psp.vector2Value;
                        }
                    }
                    outline.Add(o);
                }
            }
            return(outline);
        }
 private void SetDefaultValue()
 {
     textureType      = TextureImporterType.Default;
     maxTextureSize   = DEFAULT_MAX_TEXTURE_SIZE;
     spriteImportMode = SpriteImportMode.Single;
     GUI.FocusControl("");
 }
        public void SpriteRectDataProvider_AddSpriteRectPersistAfterReimport(SpriteImportMode mode, bool mosaicLayer, int expectedSprite, bool expectAdd)
        {
            var so = new SerializedObject(m_Importer);
            var textureImporterSettingsSP = so.FindProperty("m_TextureImporterSettings");

            textureImporterSettingsSP.FindPropertyRelative("m_SpriteMode").intValue = (int)mode;
            so.FindProperty("m_MosaicLayers").boolValue = mosaicLayer;
            so.ApplyModifiedProperties();

            var spriteProvider = m_Importer.GetDataProvider <ISpriteEditorDataProvider>();
            var rects          = spriteProvider.GetSpriteRects().ToList();
            var newRect        = new SpriteRect();

            newRect.name = "Test";
            newRect.rect = new Rect(0, 0, 32, 32);
            rects.Add(newRect);
            spriteProvider.SetSpriteRects(rects.ToArray());
            spriteProvider.Apply();
            m_Importer.SaveAndReimport();
            var importer = AssetImporter.GetAtPath(m_Importer.assetPath) as PSDImporter;

            spriteProvider = importer.GetDataProvider <ISpriteEditorDataProvider>();
            Assert.AreEqual(expectedSprite, spriteProvider.GetSpriteRects().Length);
            Assert.AreEqual(expectAdd, spriteProvider.GetSpriteRects().FirstOrDefault(x => x.spriteID == newRect.spriteID) != null);
            Assert.AreEqual(expectedSprite, AssetDatabase.LoadAllAssetsAtPath(m_Importer.assetPath).Count(x => x is Sprite));
        }
Beispiel #4
0
        public static SpriteMetadataReader GetReader(Sprite sprite, MetadataStorage storage)
        {
            if (!sprite)
            {
                throw new System.ArgumentException();
            }

            string metadata = storage.GetMetadata(sprite);

            int.TryParse(metadata.Substring(kSpriteMode, kNewLine), out int mode);
            SpriteImportMode importMode = (SpriteImportMode)mode;

            SpriteMetadataReader reader;

            switch (importMode)
            {
            case SpriteImportMode.Multiple:
                reader = new SpriteInfoReader_Multiply(sprite.name);
                break;

            case SpriteImportMode.Single:
                reader = new SpriteInfoReader_Single(sprite.textureRect.size);
                break;

            default: throw new System.Exception($"{importMode} is unsupportable sprite import mode!");
            }
            reader.path = MetadataStorage.GetAssetMetaFilePath(sprite);
            reader.Init(metadata);
            return(reader);
        }
Beispiel #5
0
        private Vertex2DMetaData[] LoadVertex2DMetaData(SerializedObject importer, SpriteImportMode mode, int index)
        {
            SerializedProperty serializedProperty  = (mode != SpriteImportMode.Multiple) ? importer.FindProperty("m_SpriteSheet") : importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index);
            SerializedProperty serializedProperty2 = serializedProperty.FindPropertyRelative("m_Vertices");
            SerializedProperty serializedProperty3 = serializedProperty.FindPropertyRelative("m_Weights");

            Vertex2DMetaData[] array = new Vertex2DMetaData[serializedProperty2.arraySize];
            for (int i = 0; i < serializedProperty2.arraySize; i++)
            {
                SerializedProperty arrayElementAtIndex  = serializedProperty2.GetArrayElementAtIndex(i);
                SerializedProperty arrayElementAtIndex2 = serializedProperty3.GetArrayElementAtIndex(i);
                array[i] = new Vertex2DMetaData
                {
                    position   = arrayElementAtIndex.vector2Value,
                    boneWeight = new BoneWeight
                    {
                        weight0    = arrayElementAtIndex2.FindPropertyRelative("weight[0]").floatValue,
                        weight1    = arrayElementAtIndex2.FindPropertyRelative("weight[1]").floatValue,
                        weight2    = arrayElementAtIndex2.FindPropertyRelative("weight[2]").floatValue,
                        weight3    = arrayElementAtIndex2.FindPropertyRelative("weight[3]").floatValue,
                        boneIndex0 = arrayElementAtIndex2.FindPropertyRelative("boneIndex[0]").intValue,
                        boneIndex1 = arrayElementAtIndex2.FindPropertyRelative("boneIndex[1]").intValue,
                        boneIndex2 = arrayElementAtIndex2.FindPropertyRelative("boneIndex[2]").intValue,
                        boneIndex3 = arrayElementAtIndex2.FindPropertyRelative("boneIndex[3]").intValue
                    }
                };
            }
            return(array);
        }
        // Windowのクライアント領域のGUI処理を記述
        void OnGUI()
        {
            textureType      = (TextureImporterType)EditorGUILayout.EnumPopup("Texture Type", textureType);
            maxTextureSize   = EditorGUILayout.IntField("Max Size", maxTextureSize);
            spriteImportMode = (SpriteImportMode)EditorGUILayout.EnumPopup("Sprite Mode", spriteImportMode);

            EditorGUILayout.Space();

            // ボタンをGUIに配置、ボタン押下でオブジェクト作成する
            if (GUILayout.Button("デフォルト値ロード"))
            {
                SetDefaultValue();
            }
            // ボタンをGUIに配置、ボタン押下でオブジェクト作成する
            if (GUILayout.Button("スプライト用設定値ロード"))
            {
                SetValueForSprite();
            }

            EditorGUILayout.Space();

            // ボタンをGUIに配置、ボタン押下でオブジェクト作成する
            if (GUILayout.Button("設定する"))
            {
                ChangeTextureType();
            }
        }
Beispiel #7
0
        private static List <SpriteBone> Load(SerializedObject importer, SpriteImportMode mode, int index)
        {
            var sp = mode == SpriteImportMode.Multiple ?
                     importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index).FindPropertyRelative("m_Bones") :
                     importer.FindProperty("m_SpriteSheet.m_Bones");

            var spriteBone = new List <SpriteBone>(sp.arraySize);

            if (sp.arraySize > 0)
            {
                var boneSO = sp.GetArrayElementAtIndex(0);
                for (int i = 0; i < sp.arraySize; ++i, boneSO.Next(false))
                {
                    var sb = new SpriteBone();
                    sb.length   = boneSO.FindPropertyRelative("length").floatValue;
                    sb.position = boneSO.FindPropertyRelative("position").vector3Value;
                    sb.rotation = boneSO.FindPropertyRelative("rotation").quaternionValue;
                    sb.parentId = boneSO.FindPropertyRelative("parentId").intValue;
                    sb.name     = boneSO.FindPropertyRelative("name").stringValue;
                    sb.guid     = boneSO.FindPropertyRelative("guid").stringValue;
                    sb.color    = boneSO.FindPropertyRelative("color").colorValue;
                    spriteBone.Add(sb);
                }
            }
            return(spriteBone);
        }
 private void SetValueForSprite()
 {
     textureType      = TextureImporterType.Sprite;
     maxTextureSize   = SPRITE_MAX_TEXTURE_SIZE;
     spriteImportMode = SpriteImportMode.Single;
     GUI.FocusControl("");
 }
Beispiel #9
0
        private Vertex2DMetaData[] LoadVertex2DMetaData(SerializedObject importer, SpriteImportMode mode, int index)
        {
            var so = mode == SpriteImportMode.Multiple ?
                     importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index) :
                     importer.FindProperty("m_SpriteSheet");

            var verticesSP = so.FindPropertyRelative("m_Vertices");
            var vertices   = new Vertex2DMetaData[verticesSP.arraySize];

            if (verticesSP.arraySize > 0)
            {
                var weightsSP = so.FindPropertyRelative("m_Weights");
                var vsp       = verticesSP.GetArrayElementAtIndex(0);
                var wsp       = weightsSP.GetArrayElementAtIndex(0);
                for (int i = 0; i < verticesSP.arraySize; ++i, vsp.Next(false), wsp.Next(false))
                {
                    vertices[i] = new Vertex2DMetaData
                    {
                        position   = vsp.vector2Value,
                        boneWeight = new BoneWeight
                        {
                            weight0    = wsp.FindPropertyRelative("weight[0]").floatValue,
                            weight1    = wsp.FindPropertyRelative("weight[1]").floatValue,
                            weight2    = wsp.FindPropertyRelative("weight[2]").floatValue,
                            weight3    = wsp.FindPropertyRelative("weight[3]").floatValue,
                            boneIndex0 = wsp.FindPropertyRelative("boneIndex[0]").intValue,
                            boneIndex1 = wsp.FindPropertyRelative("boneIndex[1]").intValue,
                            boneIndex2 = wsp.FindPropertyRelative("boneIndex[2]").intValue,
                            boneIndex3 = wsp.FindPropertyRelative("boneIndex[3]").intValue
                        }
                    };
                }
            }
            return(vertices);
        }
 internal TextureImporterDataProvider(TextureImporter importer)
 {
     m_TextureImporter = importer;
     if (m_TextureImporter != null)
     {
         m_SpriteImportMode = m_TextureImporter.spriteImportMode;
     }
 }
 internal TextureImporterDataProvider(TextureImporter importer)
 {
     m_TextureImporter = importer;
     if (m_TextureImporter != null)
     {
         m_SpriteImportMode       = m_TextureImporter.spriteImportMode;
         m_CachedSerializedObject = new SerializedObject(m_TextureImporter);
     }
 }
Beispiel #12
0
    static void BaseSpriteEditorForExtrude(SpriteImportMode spriteType, int cNumber, int rNumber, float pivotX, float pivotY)
    {
        Object[] objs = GetSelectedTextures();

        // Selection.objects = new Object[0];

        if (objs.Length <= 0)
        {
            LogUtil.LogError("没有选中图片");
            return;
        }
        for (int i = 0; i < objs.Length; i++)
        {
            Texture2D itemTexture = (Texture2D)objs[i];
            string    path        = AssetDatabase.GetAssetPath(itemTexture);

            TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;

            textureImporter.textureType         = TextureImporterType.Sprite;
            textureImporter.spriteImportMode    = spriteType;
            textureImporter.filterMode          = FilterMode.Point;
            textureImporter.maxTextureSize      = 8192;
            textureImporter.spritePixelsPerUnit = 32;
            textureImporter.compressionQuality  = 100;
            textureImporter.isReadable          = true;

            if (cNumber == 0 && rNumber == 0)
            {
                continue;
            }
            List <SpriteMetaData> newData = new List <SpriteMetaData>();

            float cItemSize = (itemTexture.width - 2 * cNumber) / cNumber;
            float rItemSize = (itemTexture.height - 2 * rNumber) / rNumber;
            int   position  = 0;
            for (int r = rNumber; r > 0; r--)
            {
                for (int c = 0; c < cNumber; c++)
                {
                    SpriteMetaData smd = new SpriteMetaData();
                    smd.pivot     = new Vector2(pivotX, pivotY);
                    smd.alignment = 9;
                    smd.name      = itemTexture.name + "_" + position;
                    smd.rect      = new Rect(c * cItemSize + 1 + c * 2, (r - 1) * rItemSize + 1 + (r - 1) * 2, cItemSize, rItemSize);
                    newData.Add(smd);
                    position++;
                }
            }

            textureImporter.spritesheet = newData.ToArray();
            AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
        }
    }
Beispiel #13
0
        private Vector2Int[] LoadEdges(SerializedObject importer, SpriteImportMode mode, int index)
        {
            SerializedProperty serializedProperty  = (mode != SpriteImportMode.Multiple) ? importer.FindProperty("m_SpriteSheet") : importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index);
            SerializedProperty serializedProperty2 = serializedProperty.FindPropertyRelative("m_Edges");

            Vector2Int[] array = new Vector2Int[serializedProperty2.arraySize];
            for (int i = 0; i < serializedProperty2.arraySize; i++)
            {
                array[i] = serializedProperty2.GetArrayElementAtIndex(i).vector2IntValue;
            }
            return(array);
        }
Beispiel #14
0
    public static void SetSpriteMode(this Texture2D texture, SpriteImportMode mode)
    {
        TextureImporter tempImporter = (TextureImporter)AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture));

        if (tempImporter != null)
        {
            Selection.activeObject        = null;
            tempImporter.textureType      = TextureImporterType.Sprite;
            tempImporter.spriteImportMode = mode;
            AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(texture));
            AssetDatabase.Refresh();
        }
    }
        public void SpriteRectDataProvider_HasCorrectNumberOfSpriteRect(SpriteImportMode mode, bool mosaicLayer, int expectedSprite)
        {
            var so = new SerializedObject(m_Importer);
            var textureImporterSettingsSP = so.FindProperty("m_TextureImporterSettings");

            textureImporterSettingsSP.FindPropertyRelative("m_SpriteMode").intValue = (int)mode;
            so.FindProperty("m_MosaicLayers").boolValue = mosaicLayer;
            so.ApplyModifiedProperties();
            m_Importer.SaveAndReimport();

            var spriteProvider = m_Importer.GetDataProvider <ISpriteEditorDataProvider>();

            Assert.AreEqual(expectedSprite, spriteProvider.GetSpriteRects().Length);
            Assert.AreEqual(expectedSprite, AssetDatabase.LoadAllAssetsAtPath(m_Importer.assetPath).Count(x => x is Sprite));
        }
Beispiel #16
0
        private static List <Vector2[]> Load(SerializedObject importer, SpriteImportMode mode, int index)
        {
            SerializedProperty serializedProperty = (mode != SpriteImportMode.Multiple) ? importer.FindProperty("m_SpriteSheet.m_Outline") : importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index).FindPropertyRelative("m_Outline");
            List <Vector2[]>   list = new List <Vector2[]>();

            for (int i = 0; i < serializedProperty.arraySize; i++)
            {
                SerializedProperty arrayElementAtIndex = serializedProperty.GetArrayElementAtIndex(i);
                Vector2[]          array = new Vector2[arrayElementAtIndex.arraySize];
                for (int j = 0; j < arrayElementAtIndex.arraySize; j++)
                {
                    array[j] = arrayElementAtIndex.GetArrayElementAtIndex(j).vector2Value;
                }
                list.Add(array);
            }
            return(list);
        }
Beispiel #17
0
        private int[] LoadIndices(SerializedObject importer, SpriteImportMode mode, int index)
        {
            var so = mode == SpriteImportMode.Multiple ?
                     importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index) :
                     importer.FindProperty("m_SpriteSheet");

            var indicesSP = so.FindPropertyRelative("m_Indices");

            var indices = new int[indicesSP.arraySize];

            for (int i = 0; i < indicesSP.arraySize; ++i)
            {
                indices[i] = indicesSP.GetArrayElementAtIndex(i).intValue;
            }

            return(indices);
        }
Beispiel #18
0
        private Vector2Int[] LoadEdges(SerializedObject importer, SpriteImportMode mode, int index)
        {
            var so = mode == SpriteImportMode.Multiple ?
                     importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index) :
                     importer.FindProperty("m_SpriteSheet");

            var edgesSP = so.FindPropertyRelative("m_Edges");

            var edges = new Vector2Int[edgesSP.arraySize];

            for (int i = 0; i < edgesSP.arraySize; ++i)
            {
                edges[i] = edgesSP.GetArrayElementAtIndex(i).vector2IntValue;
            }

            return(edges);
        }
    private void Revert()
    {
        textureType         = TextureImporterType.Image;
        grayscaleToAlpha    = false;
        alphaIsTransparency = false;
        wrapMode            = TextureWrapMode.Repeat;
        filterMode          = FilterMode.Bilinear;
        anisoLevel          = 1;
        createFromGrayscale = true;
        bumpiness           = 0.25f;
        filtering           = 0;
        spriteMode          = SpriteImportMode.Single;
        packingTag          = "";
        pixelsToUnits       = 100;
        meshType            = SpriteMeshType.Tight;
        extrudeEdges        = 1;
        pivot              = 505;
        pivotX             = 0.5f;
        pivotY             = 0.5f;
        mapping            = 4;
        fixupEdgeSeams     = false;
        lightType          = LightType.Spot;
        nonPowerOf2        = TextureImporterNPOTScale.ToNearest;
        generateCubemap    = TextureImporterGenerateCubemap.None;
        readWriteEnabled   = false;
        importType         = 0;
        bypassSRGBSampling = false;
        generateMipMaps    = true;
        inLinearSpace      = false;
        borderMipMaps      = false;
        mipMapFiltering    = TextureImporterMipFilter.BoxFilter;
        fadeoutMipMaps     = false;
        fadeoutMin         = 1;
        fadeoutMax         = 3;

        for (int i = 0, length = textureFormats.Length; i < length; i++)
        {
            textureFormats[i] = TextureImporterFormat.AutomaticCompressed;
        }
        for (int i = 0, length = compressionQualitys.Length; i < length; i++)
        {
            compressionQualitys[i] = (int)TextureCompressionQuality.Normal;
        }
    }
Beispiel #20
0
    private void DisplaySpriteSettings()
    {
        spriteMode = (SpriteImportMode)EditorGUILayout.EnumPopup("Sprite Mode", spriteMode);
        EditorGUI.indentLevel++;
        packingTag    = EditorGUILayout.TextField("Packing Tag", packingTag);
        pixelsPerUnit = EditorGUILayout.FloatField("Pixels Per Unit", pixelsPerUnit);
        meshType      = (SpriteMeshType)EditorGUILayout.EnumPopup("Mesh Type", meshType);
        extrudeEdges  = EditorGUILayout.IntSlider("Extrude Edges", extrudeEdges, 0, 32);

        if (spriteMode == SpriteImportMode.Single)
        {
            pivot = (Pivot)EditorGUILayout.EnumPopup("Pivot", pivot);
            if (pivot == Pivot.Custom)
            {
                pivotPoint = EditorGUILayout.Vector2Field("Custom Pivot Point", pivotPoint);
            }
        }
        EditorGUI.indentLevel--;
    }
        private static List <SpriteBone> Load(SerializedObject importer, SpriteImportMode mode, int index)
        {
            SerializedProperty serializedProperty = (mode != SpriteImportMode.Multiple) ? importer.FindProperty("m_SpriteSheet.m_Bones") : importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index).FindPropertyRelative("m_Bones");
            List <SpriteBone>  list = new List <SpriteBone>(serializedProperty.arraySize);

            for (int i = 0; i < serializedProperty.arraySize; i++)
            {
                SerializedProperty arrayElementAtIndex = serializedProperty.GetArrayElementAtIndex(i);
                list.Add(new SpriteBone
                {
                    length   = arrayElementAtIndex.FindPropertyRelative("length").floatValue,
                    position = arrayElementAtIndex.FindPropertyRelative("position").vector3Value,
                    rotation = arrayElementAtIndex.FindPropertyRelative("rotation").quaternionValue,
                    parentId = arrayElementAtIndex.FindPropertyRelative("parentId").intValue,
                    name     = arrayElementAtIndex.FindPropertyRelative("name").stringValue
                });
            }
            return(list);
        }
Beispiel #22
0
        private static List <Vector2[]> Load(SerializedObject importer, SpriteImportMode mode, int index)
        {
            var outlineSP = mode == SpriteImportMode.Multiple ?
                            importer.FindProperty("m_SpriteSheet.m_Sprites").GetArrayElementAtIndex(index).FindPropertyRelative("m_PhysicsShape") :
                            importer.FindProperty("m_SpriteSheet.m_PhysicsShape");

            var outline = new List <Vector2[]>();

            for (int j = 0; j < outlineSP.arraySize; ++j)
            {
                SerializedProperty outlinePathSP = outlineSP.GetArrayElementAtIndex(j);
                var o = new Vector2[outlinePathSP.arraySize];
                for (int k = 0; k < outlinePathSP.arraySize; ++k)
                {
                    o[k] = outlinePathSP.GetArrayElementAtIndex(k).vector2Value;
                }
                outline.Add(o);
            }
            return(outline);
        }
        private void UpdateAligmentAndPivot(Texture2D spriteSheet)
        {
            string assetPath = AssetDatabase.GetAssetPath(spriteSheet);

            if (string.IsNullOrEmpty(assetPath))
            {
                return;
            }
            TextureImporter spriteSheetImporter = (TextureImporter)TextureImporter.GetAtPath(assetPath);

            SpriteMetaData[] aSpriteMetaData = spriteSheetImporter.spritesheet;
            for (int i = 0; i < aSpriteMetaData.Length; ++i)
            {
                aSpriteMetaData[i].alignment = (int)m_target.SpriteAlignment;
                aSpriteMetaData[i].pivot     = GetPivotValue(m_target.SpriteAlignment, m_target.CustomPivot);
            }
            SpriteImportMode savedMode = spriteSheetImporter.spriteImportMode;

            spriteSheetImporter.textureType      = TextureImporterType.Sprite; // NOTE: without this, "spriteSheetImporter.spritesheet = aSpriteMetaData" won't be effective. I don't know why.
            spriteSheetImporter.spriteImportMode = savedMode;                  // fix: Unity 5.5 will set this to Single after setting textureType to Sprite.
            spriteSheetImporter.spritesheet      = aSpriteMetaData;
            AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceUpdate);
        }
    private void Reset()
    {
        switch (textureType)
        {
        case TextureImporterType.Image:
            grayscaleToAlpha    = false;
            alphaIsTransparency = false;
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
                textureFormats[i] = TextureImporterFormat.AutomaticCompressed;
            }
            break;

        case TextureImporterType.Bump:
            createFromGrayscale = true;
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
                textureFormats[i] = TextureImporterFormat.AutomaticCompressed;
            }
            break;

        case TextureImporterType.GUI:
            spriteMode = SpriteImportMode.Single;
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
                textureFormats[i] = TextureImporterFormat.AutomaticCompressed;
            }
            break;

        case TextureImporterType.Sprite:
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
                textureFormats[i] = TextureImporterFormat.AutomaticCompressed;
            }
            break;

        case TextureImporterType.Cursor:
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
                textureFormats[i] = TextureImporterFormat.AutomaticCompressed;
            }
            break;

        case TextureImporterType.Reflection:
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
                textureFormats[i] = TextureImporterFormat.AutomaticCompressed;
            }
            mapping        = 4;
            fixupEdgeSeams = false;
            break;

        case TextureImporterType.Cookie:
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
                textureFormats[i] = TextureImporterFormat.Alpha8;
            }
            lightType           = LightType.Spot;
            mapping             = 2;
            fixupEdgeSeams      = false;
            grayscaleToAlpha    = false;
            alphaIsTransparency = false;
            break;

        case TextureImporterType.Lightmap:
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
                textureFormats[i] = TextureImporterFormat.AutomaticCompressed;
            }
            break;

        case TextureImporterType.Advanced:
            nonPowerOf2         = 0;
            readWriteEnabled    = false;
            importType          = 0;
            grayscaleToAlpha    = false;
            alphaIsTransparency = false;
            bypassSRGBSampling  = false;
            spriteMode          = SpriteImportMode.None;
            generateMipMaps     = true;
            inLinearSpace       = false;
            borderMipMaps       = false;
            for (int i = 0, length = textureFormats.Length; i < length; i++)
            {
                maxTextureSize[i] = 5;
            }
            textureFormats[8] = TextureImporterFormat.AutomaticCompressed;
            textureFormats[0] = TextureImporterFormat.DXT5;
            textureFormats[1] = TextureImporterFormat.DXT5;
            textureFormats[2] = TextureImporterFormat.PVRTC_RGBA4;
            textureFormats[3] = TextureImporterFormat.RGBA16;
            textureFormats[4] = TextureImporterFormat.RGBA16;
            textureFormats[5] = TextureImporterFormat.DXT5;
            textureFormats[6] = TextureImporterFormat.DXT5;
            textureFormats[7] = TextureImporterFormat.DXT5;
            break;
        }
    }
    private void DrawTextureSettings(TextureImporterType textureType)
    {
        if (textureType != oldTextureType)
        {
            Reset();
        }
        switch (textureType)
        {
        case TextureImporterType.Image:
            if ((grayscaleToAlpha = EditorGUILayout.Toggle("Alpha from Grayscale", grayscaleToAlpha)))
            {
                alphaIsTransparency = EditorGUILayout.Toggle("Alpha is Transparency", alphaIsTransparency);
            }
            GUILayout.Space(8f);
            wrapMode = (TextureWrapMode)DrawPopup("Wrap Mode", (int)wrapMode, wrapModeString);
            if ((filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString)) != FilterMode.Point)
            {
                anisoLevel = EditorGUILayout.IntSlider("Aniso Level", anisoLevel, 0, 9);
            }
            break;

        case TextureImporterType.Bump:
            if (createFromGrayscale = EditorGUILayout.Toggle("(Invalid) Create from Grayscale", createFromGrayscale))
            {
                bumpiness = EditorGUILayout.Slider("(Invalid) Bumpiness", bumpiness, 0, 0.3f);
                filtering = DrawPopup("(Invalid) Filtering", filtering, filteringString);
            }
            GUILayout.Space(8f);
            wrapMode = (TextureWrapMode)DrawPopup("Wrap Mode", (int)wrapMode, wrapModeString);
            if ((filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString)) != FilterMode.Point)
            {
                anisoLevel = EditorGUILayout.IntSlider("Aniso Level", anisoLevel, 0, 9);
            }
            break;

        case TextureImporterType.GUI:
            GUILayout.Space(8f);
            filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString);
            break;

        case TextureImporterType.Sprite:
            spriteMode    = (SpriteImportMode)DrawPopup("Sprite Mode", (int)spriteMode, spriteModeString, spriteModeArray);
            packingTag    = EditorGUILayout.TextField("    Packing Tag", packingTag);
            pixelsToUnits = EditorGUILayout.FloatField("    Pixels To Units", pixelsToUnits);
            if (spriteMode == SpriteImportMode.Single)
            {
                if ((pivot = DrawPopup("    Pivot", pivot, pivotString, pivotArray)) == -1)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(EditorGUIUtility.labelWidth);
                    GUILayout.Label("X");
                    pivotX = EditorGUILayout.FloatField(pivotX);
                    GUILayout.Label("Y");
                    pivotY = EditorGUILayout.FloatField(pivotY);
                    GUILayout.EndHorizontal();
                }
            }
            GUILayout.Space(8f);
            filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString);
            break;

        case TextureImporterType.Cursor:
            GUILayout.Space(8f);
            wrapMode   = (TextureWrapMode)DrawPopup("Wrap Mode", (int)wrapMode, wrapModeString);
            filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString);
            break;

        case TextureImporterType.Reflection:
            mapping        = DrawPopup("Mapping", mapping, mappingString);
            fixupEdgeSeams = EditorGUILayout.Toggle("Fixup Edge Seams", fixupEdgeSeams);
            GUILayout.Space(8f);
            if ((filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString)) != FilterMode.Point)
            {
                anisoLevel = EditorGUILayout.IntSlider("Aniso Level", anisoLevel, 0, 9);
            }
            break;

        case TextureImporterType.Cookie:
            if ((lightType = (LightType)DrawPopup("(Invalid) Light Type", (int)lightType, lightTypeString)) == LightType.Point)
            {
                mapping        = DrawPopup("(Invalid) Mapping", mapping, mappingString);
                fixupEdgeSeams = EditorGUILayout.Toggle("(Invalid) Fixup Edge Seams", fixupEdgeSeams);
            }
            grayscaleToAlpha = EditorGUILayout.Toggle("Alpha from Grayscale", grayscaleToAlpha);
            GUILayout.Space(8f);
            if ((filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString)) != FilterMode.Point)
            {
                anisoLevel = EditorGUILayout.IntSlider("Aniso Level", anisoLevel, 0, 9);
            }
            break;

        case TextureImporterType.Lightmap:
            GUILayout.Space(8f);
            if ((filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString)) != FilterMode.Point)
            {
                anisoLevel = EditorGUILayout.IntSlider("Aniso Level", anisoLevel, 0, 9);
            }
            break;

        case TextureImporterType.Advanced:
            nonPowerOf2      = (TextureImporterNPOTScale)DrawPopup("Non Power of 2", (int)nonPowerOf2, nonPowerOf2String);
            generateCubemap  = (TextureImporterGenerateCubemap)DrawPopup("Generate Cubemap", (int)generateCubemap, generateCubemapString);
            readWriteEnabled = EditorGUILayout.Toggle("Read/Write Enabled", readWriteEnabled);
            importType       = (TextureImporterType)DrawPopup("Import Type", (int)importType, importTypeString, importTypeArray);
            if (importType == TextureImporterType.Image)
            {
                grayscaleToAlpha    = EditorGUILayout.Toggle("    Alpha from Grayscale", grayscaleToAlpha);
                alphaIsTransparency = EditorGUILayout.Toggle("    Alpha is Transparency", alphaIsTransparency);
                bypassSRGBSampling  = EditorGUILayout.Toggle("    (Invalid) Bypass sRGB Sampling", bypassSRGBSampling);
                spriteMode          = (SpriteImportMode)DrawPopup("    Sprite Mode", (int)spriteMode, spriteModeStringFull);
                if (spriteMode != SpriteImportMode.None)
                {
                    packingTag    = EditorGUILayout.TextField("        Packing Tag", packingTag);
                    pixelsToUnits = EditorGUILayout.FloatField("        Pixels To Units", pixelsToUnits);
                    meshType      = (SpriteMeshType)DrawPopup("        Mesh Type", (int)meshType, meshTypeString);
                    extrudeEdges  = (uint)EditorGUILayout.IntSlider("        Extrude Edges", (int)extrudeEdges, 0, 32);
                    if (spriteMode == SpriteImportMode.Single)
                    {
                        if ((pivot = DrawPopup("        Pivot", pivot, pivotString, pivotArray)) == -1)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Space(EditorGUIUtility.labelWidth);
                            GUILayout.Label("X");
                            pivotX = EditorGUILayout.FloatField(pivotX);
                            GUILayout.Label("Y");
                            pivotY = EditorGUILayout.FloatField(pivotY);
                            GUILayout.EndHorizontal();
                        }
                    }
                }
            }
            else if (importType == TextureImporterType.Bump)
            {
                if (createFromGrayscale = EditorGUILayout.Toggle("    (Invalid) Create from Grayscale", createFromGrayscale))
                {
                    bumpiness = EditorGUILayout.Slider("    (Invalid) Bumpiness", bumpiness, 0, 0.3f);
                    filtering = DrawPopup("    Filtering", filtering, filteringString);
                }
            }
            GUILayout.Space(8f);
            if (generateMipMaps = EditorGUILayout.Toggle("Generate Mip Maps", generateMipMaps))
            {
                inLinearSpace   = EditorGUILayout.Toggle("    In Linear Space", inLinearSpace);
                borderMipMaps   = EditorGUILayout.Toggle("    Border Mip Maps", borderMipMaps);
                mipMapFiltering = (TextureImporterMipFilter)DrawPopup("    Mip Map Filtering", (int)mipMapFiltering, mipMapFilteringString);
                if (fadeoutMipMaps = EditorGUILayout.Toggle("    Fadeout Mip Maps", fadeoutMipMaps))
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label("        Fade Range");
                    GUILayout.Space(43f);
                    EditorGUILayout.MinMaxSlider(ref fadeoutMin, ref fadeoutMax, 0, 10);
                    fadeoutMin = Mathf.RoundToInt(fadeoutMin);
                    fadeoutMax = Mathf.RoundToInt(fadeoutMax);
                    GUILayout.EndHorizontal();
                }
            }
            GUILayout.Space(8f);
            wrapMode = (TextureWrapMode)DrawPopup("Wrap Mode", (int)wrapMode, wrapModeString);
            if ((filterMode = (FilterMode)DrawPopup("Filter Mode", (int)filterMode, filterModeString)) != FilterMode.Point)
            {
                anisoLevel = EditorGUILayout.IntSlider("Aniso Level", anisoLevel, 0, 9);
            }
            break;

        default:
            break;
        }
        GUILayout.Space(8f);
    }
Beispiel #26
0
    private void OnGUI()
    {
        Texturetype = (TextureImporterType)EditorGUILayout.EnumPopup("Texture Type", Texturetype);
        switch (Texturetype)
        {
        case TextureImporterType.Default:
            TexShape              = (TextureImporterShape)EditorGUILayout.EnumPopup("Texture Shape", TexShape);
            IsSrgb                = EditorGUILayout.Toggle("sRGB(Color Texture)", IsSrgb);
            AlphaSource           = (TextureImporterAlphaSource)EditorGUILayout.EnumPopup("Alpha Source", AlphaSource);
            IsAlphaIsTransparency = EditorGUILayout.Toggle("Alpha Is Transparency", IsAlphaIsTransparency);
            NpotScale             = (TextureImporterNPOTScale)EditorGUILayout.EnumPopup("Non Power of 2", NpotScale);
            IsRead                = EditorGUILayout.Toggle("Read/Write Enabled", IsRead);
            IsStreamingMipMap     = EditorGUILayout.Toggle("Streaming Mip Maps", IsStreamingMipMap);
            IsGenerateMipmap      = EditorGUILayout.Toggle("Generate Mip Maps", IsGenerateMipmap);
            DefalutWarpMode       = (TextureWrapMode)EditorGUILayout.EnumPopup("Wrap Mode", DefalutWarpMode);
            MaxSize               = (MaxSize)EditorGUILayout.EnumPopup("Max Size", MaxSize);
            Compression           = (TextureImporterCompression)EditorGUILayout.EnumPopup("Compression", Compression);
            break;

        case TextureImporterType.NormalMap:
            break;

        case TextureImporterType.GUI:
            break;

        case TextureImporterType.Sprite:
            SpriteImportMode      = (SpriteImportMode)EditorGUILayout.EnumPopup("Sprite Mode", SpriteImportMode);
            PackingTag            = EditorGUILayout.TextField("Packing Tag", PackingTag);
            IsSrgb                = EditorGUILayout.Toggle("sRGB(Color Texture)", IsSrgb);
            AlphaSource           = (TextureImporterAlphaSource)EditorGUILayout.EnumPopup("Alpha Source", AlphaSource);
            IsAlphaIsTransparency = EditorGUILayout.Toggle("Alpha Is Transparency", IsAlphaIsTransparency);
            IsRead                = EditorGUILayout.Toggle("Read/Write Enabled", IsRead);
            IsGenerateMipmap      = EditorGUILayout.Toggle("Generate Mip Maps", IsGenerateMipmap);
            SpriteWarpMode        = (TextureWrapMode)EditorGUILayout.EnumPopup("Wrap Mode", SpriteWarpMode);
            MaxSize               = (MaxSize)EditorGUILayout.EnumPopup("Max Size", MaxSize);
            Compression           = (TextureImporterCompression)EditorGUILayout.EnumPopup("Compression", Compression);
            break;

        case TextureImporterType.Cursor:
            break;

        case TextureImporterType.Cookie:
            break;

        case TextureImporterType.Lightmap:
            break;

        case TextureImporterType.SingleChannel:
            break;
        }
        if (GUILayout.Button("设置图片属性后、导入或修改前,请点击本按钮!"))
        {
            IsApply = true;
            Debug.Log("已应用设置");
        }
        if (GUILayout.Button("还原设置: 请点击本按钮 或者 直接关闭面板 !"))
        {
            IsApply = false;
            Debug.Log("已还原设置");
        }
    }
Beispiel #27
0
 static void BaseSpriteEditorForExtrude(SpriteImportMode spriteType, int cNumber, int rNumber)
 {
     BaseSpriteEditorForExtrude(spriteType, cNumber, rNumber, 0.5f, 0.5f);
 }
Beispiel #28
0
        static bool CreateTilemapSprite(string targetPath, int cellWidth, int cellHeight, int pixelsPerUnit, TSX.Tileset tileset /*int width, int height, int tileWidth, int tileHeight, int tileCount*/, string subSpriteNameBase, out Sprite[] tileSprites)
        {
            TextureImporter ti = AssetImporter.GetAtPath(targetPath) as TextureImporter;

            TextureImporterSettings textureSettings = new TextureImporterSettings();

            ti.ReadTextureSettings(textureSettings);

            SpriteMeshType   meshType   = SpriteMeshType.FullRect;
            SpriteAlignment  alignment  = SpriteAlignment.Custom;
            Vector2          pivot      = GetPivot(tileset.image.width, tileset.image.height, cellWidth, cellHeight);
            FilterMode       filterMode = FilterMode.Point;
            SpriteImportMode importMode = SpriteImportMode.Multiple;

            if (textureSettings.spritePixelsPerUnit != pixelsPerUnit ||
                textureSettings.spriteMeshType != meshType ||
                textureSettings.spriteAlignment != (int)alignment ||
                textureSettings.spritePivot != pivot ||
                textureSettings.filterMode != filterMode ||
                textureSettings.spriteMode != (int)importMode)
            {
                textureSettings.spritePixelsPerUnit = pixelsPerUnit;
                textureSettings.spriteMeshType      = meshType;
                textureSettings.spriteAlignment     = (int)alignment;
                textureSettings.spritePivot         = pivot;
                textureSettings.filterMode          = filterMode;
                textureSettings.spriteMode          = (int)importMode;

                ti.SetTextureSettings(textureSettings);

                List <SpriteMetaData> newData = new List <SpriteMetaData>(tileset.tilecount);

                int i = 0;
                for (int y = tileset.image.height - tileset.margin; y > 0; y -= (tileset.tileheight + tileset.spacing))
                {
                    for (int x = tileset.margin; x < tileset.image.width; x += (tileset.tilewidth + tileset.spacing))
                    {
                        SpriteMetaData data = new SpriteMetaData();
                        data.name      = subSpriteNameBase + "_" + i;
                        data.alignment = (int)alignment;
                        data.pivot     = GetPivot(tileset.tilewidth, tileset.tileheight, cellWidth, cellHeight);
                        data.rect      = new Rect(x, y - tileset.tileheight, tileset.tilewidth, tileset.tileheight);

                        newData.Add(data);
                        i++;
                        if (i >= tileset.tilecount)
                        {
                            break;
                        }
                    }
                    if (i >= tileset.tilecount)
                    {
                        break;
                    }
                }

                ti.spritesheet = newData.ToArray();

                EditorUtility.SetDirty(ti);
                ti.SaveAndReimport();
            }

            Sprite[] subSprites = AssetDatabase.LoadAllAssetsAtPath(targetPath).OfType <Sprite>().ToArray();
            // For some reason Unity thinks it's smart to return the sub-sprites in random order...
            // ...and provide no API for retrieving sub-sprites by index >_<
            // so we have to manually sort them by the ids in their names
            Array.Sort <Sprite>(subSprites, new SpriteComparer());
            tileSprites = subSprites;
            return(true);
        }
Beispiel #29
0
    private void DisplaySingle()
    {
        // make sure the list is not empty
        // if so add null sprite
        if (sprites.Count == 0)
        {
            sprites.Add(null);
        }


        EditorGUILayout.BeginHorizontal();

        // begin left column for variables and properties
        EditorGUILayout.BeginVertical(GUILayout.Width(position.width / 2));
        // start horizontal row
        EditorGUILayout.BeginHorizontal();
        // label for sprite
        EditorGUILayout.LabelField("Sprite", GUILayout.Width(130));
        // display the sprite object for the 0 index
        sprites[0] = (Texture2D)EditorGUILayout.ObjectField(sprites[0], typeof(Texture2D), true);
        if (sprites[0])
        {
            if (GUILayout.Button("Focus", GUILayout.Width(60)))
            {
                Selection.activeObject = sprites[0];
            }
        }
        // end horizontal row
        EditorGUILayout.EndHorizontal();

        if (!sprites[0])
        {
            return;
        }

        TextureImporter importer = (TextureImporter)TextureImporter.GetAtPath(AssetDatabase.GetAssetPath(sprites[0]));

        // start horizontal row
        EditorGUILayout.BeginHorizontal();
        // label for sprite
        EditorGUILayout.LabelField("Show Checkers", GUILayout.Width(130));
        // toggle for power of 4
        showBackground = EditorGUILayout.Toggle(showBackground, GUILayout.Width(40));
        // end horizontal row
        EditorGUILayout.EndHorizontal();

        if (sprites[0].width % 4 == 0 && sprites[0].height % 4 == 0)
        {
            alreadyPower4 = true;
        }
        else
        {
            alreadyPower4 = false;
        }

        if (!alreadyPower4)
        {
            // start horizontal row
            EditorGUILayout.BeginHorizontal();
            // label for sprite
            EditorGUILayout.LabelField("Power of 4", GUILayout.Width(130));
            // toggle for power of 4
            powerOf4 = EditorGUILayout.Toggle(powerOf4, GUILayout.Width(40));
            if (powerOf4)
            {
                EditorGUILayout.LabelField("Adds white space to make both width and height divisible by 4");
                if (GUILayout.Button("Apply"))
                {
                    MakePowerOf4(sprites[0]);
                }
            }
            // end horizontal row
            EditorGUILayout.EndHorizontal();
        }

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Sprite Mode Settings", EditorStyles.boldLabel);

        // start horizontal row
        EditorGUILayout.BeginHorizontal();
        // label for sprite mode
        EditorGUILayout.LabelField("Sprite Mode", GUILayout.Width(130));
        // enum popup for sprite mode
        mode = (SpriteImportMode)EditorGUILayout.EnumPopup(mode);
        // end horizontal row
        EditorGUILayout.EndHorizontal();

        // start horizontal row
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("", GUILayout.Width(130));
        if (mode != importer.spriteImportMode)
        {
            if (GUILayout.Button("Convert"))
            {
                importer.spriteImportMode = mode;
                importer.SaveAndReimport();
            }
        }
        else
        {
            if (mode == SpriteImportMode.Multiple)
            {
                if (GUILayout.Button("Launch Sprite Editor"))
                {
                    Selection.activeObject = sprites[0];
                    EditorWindow.GetWindow(typeof(EditorWindow).Assembly.GetTypes().Where(t => t.Name == "SpriteEditorWindow").FirstOrDefault());
                }

                if (GUILayout.Button("Generate Multiple Sprites"))
                {
                    GenerateMultiple(sprites[0]);
                }

                if (GUILayout.Button("Layout"))
                {
                    PlaceInScene(sprites[0]);
                }
            }
        }

        // end horizontal row
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Import Settings", EditorStyles.boldLabel);

        // start horizontal row
        EditorGUILayout.BeginHorizontal();
        // label for max size
        EditorGUILayout.LabelField("Max Size", GUILayout.Width(130));
        size = EditorGUILayout.Popup(size, maxSize);
        if (int.Parse(maxSize[size]) != importer.maxTextureSize)
        {
            if (GUILayout.Button("Apply"))
            {
                importer.maxTextureSize = int.Parse(maxSize[size]);
                importer.SaveAndReimport();
                AssetDatabase.Refresh();
            }
        }
        // end horizontal row
        EditorGUILayout.EndHorizontal();

        // start horizontal row
        EditorGUILayout.BeginHorizontal();
        // label for max size
        EditorGUILayout.LabelField("Compression", GUILayout.Width(130));
        if (powerOf4 || alreadyPower4)
        {
            compressionQuality = (TextureImporterCompression)EditorGUILayout.EnumPopup(compressionQuality);
            if (compressionQuality != importer.textureCompression)
            {
                if (GUILayout.Button("Apply"))
                {
                    importer.textureCompression = compressionQuality;
                    importer.SaveAndReimport();
                    AssetDatabase.Refresh();
                }
            }
        }
        else
        {
            EditorGUILayout.LabelField("Must be power of 4");
        }
        // end horizontal row
        EditorGUILayout.EndHorizontal();

        // start horizontal row
        EditorGUILayout.BeginHorizontal();
        // label for max size
        EditorGUILayout.LabelField("Crunch Compression", GUILayout.Width(130));
        if (powerOf4 || alreadyPower4)
        {
            useCrunch = EditorGUILayout.Toggle(useCrunch);
            if (useCrunch != importer.crunchedCompression)
            {
                if (GUILayout.Button("Apply"))
                {
                    importer.crunchedCompression = useCrunch;
                    importer.SaveAndReimport();
                    AssetDatabase.Refresh();
                }
            }
        }
        else
        {
            EditorGUILayout.LabelField("Must be power of 4");
        }
        // end horizontal row
        EditorGUILayout.EndHorizontal();

        if (useCrunch || importer.crunchedCompression)
        {
            // start horizontal row
            EditorGUILayout.BeginHorizontal();
            // label for max size
            EditorGUILayout.LabelField("Compressor Quality", GUILayout.Width(130));
            if (powerOf4 || alreadyPower4)
            {
                quality = EditorGUILayout.IntSlider(quality, 0, 100);
                if (quality != importer.compressionQuality)
                {
                    if (GUILayout.Button("Apply"))
                    {
                        importer.compressionQuality = quality;
                        importer.SaveAndReimport();
                        AssetDatabase.Refresh();
                    }
                }
            }
            else
            {
                EditorGUILayout.LabelField("Must be power of 4");
            }
            // end horizontal row
            EditorGUILayout.EndHorizontal();
        }

        bool changed = false;

        if (quality != importer.compressionQuality)
        {
            changed = true;
        }
        else if (useCrunch != importer.crunchedCompression)
        {
            changed = true;
        }
        else if (compressionQuality != importer.textureCompression)
        {
            changed = true;
        }
        else if (int.Parse(maxSize[size]) != importer.maxTextureSize)
        {
            changed = true;
        }

        // start horizontal row
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("", GUILayout.Width(130));
        GUI.enabled = changed;
        if (GUILayout.Button("Revert All"))
        {
            quality            = importer.compressionQuality;
            useCrunch          = importer.crunchedCompression;
            compressionQuality = importer.textureCompression;
            for (int i = 0; i < maxSize.Length; i++)
            {
                if (int.Parse(maxSize[i]) == importer.maxTextureSize)
                {
                    size = i;
                }
            }
        }

        if (GUILayout.Button("Apply All"))
        {
            importer.compressionQuality  = quality;
            importer.crunchedCompression = useCrunch;
            importer.textureCompression  = compressionQuality;
            importer.compressionQuality  = quality;
            importer.maxTextureSize      = int.Parse(maxSize[size]);
            importer.SaveAndReimport();
            AssetDatabase.Refresh();
        }

        GUI.enabled = true;
        // end horizontal row
        EditorGUILayout.EndHorizontal();

        // end vertical column
        EditorGUILayout.EndVertical();

        Rect rect = EditorGUILayout.BeginVertical(GUILayout.Width(position.width / 2));

        Texture2D tex    = sprites[0];
        float     width  = tex.width;
        float     height = tex.height;

        if (width > height)
        {
            width = width < (position.width / 2) - 130 ? width : (position.width / 2) - 130;
            float ratio = width / tex.width;
            height = height * ratio;
        }
        else
        {
            height = height < (position.height - 130) ? height : (position.height - 130);
            float ratio = height / tex.height;
            width = width * ratio;
        }

        float texWidth  = tex.width;
        float texHeight = tex.height;

        if (powerOf4)
        {
            while (texWidth % 4 != 0)
            {
                texWidth++;
            }

            while (texHeight % 4 != 0)
            {
                texHeight++;
            }
        }

        // draw texture
        if (showBackground)
        {
            EditorGUI.DrawTextureTransparent(new Rect(rect.x + 5, rect.y + 5, width, height), tex);
        }
        else
        {
            GUI.DrawTexture(new Rect(rect.x + 5, rect.y + 5, width, height), tex);
        }

        GUIStyle style = new GUIStyle();
        float    w     = style.CalcSize(new GUIContent(texWidth + "px")).x;
        float    lineW = (width - w) / 2.0f;

        GUI.DrawTexture(new Rect(rect.x + 5, rect.y + height + 10, lineW - 5, 2), CreateTexture(2, 2, Color.black));
        GUI.Label(new Rect(rect.x + 5 + (width / 2) - (w / 2), rect.y + height + 12 - 7.5f, w + 5, 15), texWidth + "px");
        GUI.DrawTexture(new Rect(rect.x + 5 + w + lineW + 5, rect.y + height + 10, lineW - 5, 2), CreateTexture(2, 2, Color.black));

        Vector2 h     = style.CalcSize(new GUIContent(texHeight + "px"));
        float   lineH = (height - h.y) / 2.0f;

        GUI.DrawTexture(new Rect(rect.x + 10 + width, rect.y + 5, 2, lineH - 5), CreateTexture(2, 2, Color.black));
        GUI.Label(new Rect(rect.x + 5 + width, rect.y + (height / 2) - (h.y / 2) + 5, h.x + 5, h.y + 5), texHeight + "px");
        GUI.DrawTexture(new Rect(rect.x + 10 + width, rect.y + 5 + h.y + lineH + 5, 2, lineH - 5), CreateTexture(2, 2, Color.black));

        EditorGUILayout.EndVertical();

        EditorGUILayout.EndHorizontal();
    }
Beispiel #30
0
    private void DisplayBatch()
    {
        SerializedObject so = new SerializedObject(this);

        so.Update();

        EditorGUILayout.BeginHorizontal();
        showList = EditorGUILayout.Foldout(showList, "Textures", true);
        if (GUILayout.Button("Clear Textures", GUILayout.Width(100)))
        {
            sprites.Clear();
            DrawList();
        }
        EditorGUILayout.EndHorizontal();
        if (showList)
        {
            EditorGUILayout.Space();
            list.DoLayoutList();
        }

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Sprite Mode");
        updateMode = EditorGUILayout.Toggle(updateMode, GUILayout.Width(40));
        if (updateMode)
        {
            mode = (SpriteImportMode)EditorGUILayout.EnumPopup(mode);
        }
        EditorGUILayout.EndHorizontal();

        if (mode == SpriteImportMode.Multiple)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Auto Splice");
            autoSplice = EditorGUILayout.Toggle(autoSplice, GUILayout.Width(40));
            if (autoSplice)
            {
                EditorGUILayout.LabelField("Caution! This will override any existing splices.");
            }
            EditorGUILayout.EndHorizontal();
        }


        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.PrefixLabel("Power of 4");
        powerOf4 = EditorGUILayout.Toggle(powerOf4, GUILayout.Width(40));
        if (powerOf4)
        {
            EditorGUILayout.LabelField("Adds white space to make both width and height divisible by 4.");
        }
        EditorGUILayout.EndHorizontal();

        placeInScene = EditorGUILayout.Toggle("Layout In Scene", placeInScene);

        size = EditorGUILayout.Popup("Max Size", size, maxSize);

        compressionQuality = (TextureImporterCompression)EditorGUILayout.EnumPopup("Compression", compressionQuality);
        useCrunch          = EditorGUILayout.Toggle("Crunch Compression", useCrunch);
        quality            = EditorGUILayout.IntSlider("Compressor Quality", quality, 0, 100);

        if (GUILayout.Button("Convert"))
        {
            for (int i = 0; i < sprites.Count; i++)
            {
                if (powerOf4)
                {
                    MakePowerOf4(sprites[i]);
                }
                if (mode == SpriteImportMode.Multiple && autoSplice)
                {
                    GenerateMultiple(sprites[i]);
                }

                UpdateSettings(sprites[i]);

                if (placeInScene)
                {
                    PlaceInScene(sprites[i]);
                }
            }

            AssetDatabase.Refresh();
        }

        so.ApplyModifiedProperties();
    }