void OnEnable() { if (!SpineSpriteAtlasAsset.AnySpriteAtlasNeedsRegionsLoaded()) { return; } EditorApplication.update -= SpineSpriteAtlasAsset.UpdateWhenEditorPlayModeStarted; EditorApplication.update += SpineSpriteAtlasAsset.UpdateWhenEditorPlayModeStarted; }
void OnEnable() { SpineEditorUtilities.ConfirmInitialization(); atlasFile = serializedObject.FindProperty("spriteAtlasFile"); materials = serializedObject.FindProperty("materials"); materials.isExpanded = true; atlasAsset = (SpineSpriteAtlasAsset)target; if (!SpineSpriteAtlasAsset.AnySpriteAtlasNeedsRegionsLoaded()) { return; } EditorApplication.update -= SpineSpriteAtlasAsset.UpdateWhenEditorPlayModeStarted; EditorApplication.update += SpineSpriteAtlasAsset.UpdateWhenEditorPlayModeStarted; }
override public void OnInspectorGUI() { if (serializedObject.isEditingMultipleObjects) { DrawDefaultInspector(); return; } serializedObject.Update(); atlasAsset = atlasAsset ?? (SpineSpriteAtlasAsset)target; if (atlasAsset.RegionsNeedLoading) { if (GUILayout.Button(SpineInspectorUtility.TempContent("Load regions by entering Play mode"), GUILayout.Height(20))) { EditorApplication.isPlaying = true; } } EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(atlasFile); EditorGUILayout.PropertyField(materials, true); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); atlasAsset.Clear(); atlasAsset.GetAtlas(); atlasAsset.updateRegionsInPlayMode = true; } if (materials.arraySize == 0) { EditorGUILayout.HelpBox("No materials", MessageType.Error); return; } for (int i = 0; i < materials.arraySize; i++) { SerializedProperty prop = materials.GetArrayElementAtIndex(i); var material = (Material)prop.objectReferenceValue; if (material == null) { EditorGUILayout.HelpBox("Materials cannot be null.", MessageType.Error); return; } } if (atlasFile.objectReferenceValue != null) { int baseIndent = EditorGUI.indentLevel; var regions = SpineSpriteAtlasAssetInspector.GetRegions(atlasAsset.GetAtlas()); int regionsCount = regions.Count; using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField("Atlas Regions", EditorStyles.boldLabel); EditorGUILayout.LabelField(string.Format("{0} regions total", regionsCount)); } AtlasPage lastPage = null; for (int i = 0; i < regionsCount; i++) { if (lastPage != regions[i].page) { if (lastPage != null) { EditorGUILayout.Separator(); EditorGUILayout.Separator(); } lastPage = regions[i].page; Material mat = ((Material)lastPage.rendererObject); if (mat != null) { EditorGUI.indentLevel = baseIndent; using (new GUILayout.HorizontalScope()) using (new EditorGUI.DisabledGroupScope(true)) EditorGUILayout.ObjectField(mat, typeof(Material), false, GUILayout.Width(250)); EditorGUI.indentLevel = baseIndent + 1; } else { EditorGUILayout.HelpBox("Page missing material!", MessageType.Warning); } } string regionName = regions[i].name; Texture2D icon = SpineEditorUtilities.Icons.image; if (regionName.EndsWith(" ")) { regionName = string.Format("'{0}'", regions[i].name); icon = SpineEditorUtilities.Icons.warning; EditorGUILayout.LabelField(SpineInspectorUtility.TempContent(regionName, icon, "Region name ends with whitespace. This may cause errors. Please check your source image filenames.")); } else { EditorGUILayout.LabelField(SpineInspectorUtility.TempContent(regionName, icon)); } } EditorGUI.indentLevel = baseIndent; } if (serializedObject.ApplyModifiedProperties() || SpineInspectorUtility.UndoRedoPerformed(Event.current)) { atlasAsset.Clear(); } }
void OnGUI() { so = so ?? new SerializedObject(this); EditorGUIUtility.wideMode = true; EditorGUILayout.LabelField("Spine SpriteAtlas Import", EditorStyles.boldLabel); using (new SpineInspectorUtility.BoxScope()) { EditorGUI.BeginChangeCheck(); var spriteAtlasAssetProperty = so.FindProperty("spriteAtlasAsset"); EditorGUILayout.PropertyField(spriteAtlasAssetProperty, new GUIContent("SpriteAtlas", EditorGUIUtility.IconContent("SpriteAtlas Icon").image)); if (EditorGUI.EndChangeCheck()) { so.ApplyModifiedProperties(); if (spriteAtlasAsset != null) { if (AssetUtility.SpriteAtlasSettingsNeedAdjustment(spriteAtlasAsset)) { AssetUtility.AdjustSpriteAtlasSettings(spriteAtlasAsset); } GenerateAssetsFromSpriteAtlas(spriteAtlasAsset); } } var spineSpriteAtlasAssetProperty = so.FindProperty("spineSpriteAtlasAsset"); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(spineSpriteAtlasAssetProperty, new GUIContent("SpineSpriteAtlasAsset", EditorGUIUtility.IconContent("ScriptableObject Icon").image)); if (spineSpriteAtlasAssetProperty.objectReferenceValue == null) { spineSpriteAtlasAssetProperty.objectReferenceValue = spineSpriteAtlasAsset = FindSpineSpriteAtlasAsset(spriteAtlasAsset); } if (EditorGUI.EndChangeCheck()) { so.ApplyModifiedProperties(); } EditorGUILayout.Space(); using (new EditorGUI.DisabledScope(spineSpriteAtlasAsset == null)) { if (SpineInspectorUtility.LargeCenteredButton(new GUIContent("Load regions by entering Play mode"))) { GenerateAssetsFromSpriteAtlas(spriteAtlasAsset); SpineSpriteAtlasAsset.UpdateByStartingEditorPlayMode(); } } using (new SpineInspectorUtility.BoxScope()) { if (spriteAtlasAsset == null) { EditorGUILayout.LabelField(SpineInspectorUtility.TempContent("Please assign SpriteAtlas file.", Icons.warning), GUILayout.Height(46)); } else if (spineSpriteAtlasAsset == null || spineSpriteAtlasAsset.RegionsNeedLoading) { EditorGUILayout.LabelField(SpineInspectorUtility.TempContent("Please hit 'Load regions ..' to load\nregion info. Play mode is started\nand stopped automatically.", Icons.warning), GUILayout.Height(54)); } else { EditorGUILayout.LabelField(SpineInspectorUtility.TempContent("SpriteAtlas imported\nsuccessfully.", Icons.spine), GUILayout.Height(46)); } } } bool isAtlasComplete = (spineSpriteAtlasAsset != null && !spineSpriteAtlasAsset.RegionsNeedLoading); bool canImportSkeleton = (spriteAtlasAsset != null && skeletonDataFile != null); using (new SpineInspectorUtility.BoxScope()) { using (new EditorGUI.DisabledScope(!isAtlasComplete)) { var skeletonDataAssetProperty = so.FindProperty("skeletonDataFile"); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(skeletonDataAssetProperty, SpineInspectorUtility.TempContent("Skeleton json/skel file", Icons.spine)); if (EditorGUI.EndChangeCheck()) { so.ApplyModifiedProperties(); } EditorGUILayout.Space(); } using (new EditorGUI.DisabledScope(!canImportSkeleton)) { if (SpineInspectorUtility.LargeCenteredButton(new GUIContent("Import Skeleton"))) { //AssetUtility.IngestSpriteAtlas(spriteAtlasAsset, null); string skeletonPath = AssetDatabase.GetAssetPath(skeletonDataFile); string[] skeletons = new string[] { skeletonPath }; AssetUtility.ImportSpineContent(skeletons, null); } } } }