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)); }
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); }
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(); } }
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(""); }
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); } }
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); } }
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); }
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)); }
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); }
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); }
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; } }
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); }
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); }
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("已还原设置"); } }
static void BaseSpriteEditorForExtrude(SpriteImportMode spriteType, int cNumber, int rNumber) { BaseSpriteEditorForExtrude(spriteType, cNumber, rNumber, 0.5f, 0.5f); }
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); }
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(); }
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(); }