mirror of
				https://github.com/maxartz15/VertexAnimation.git
				synced 2025-11-04 10:25:44 +01:00 
			
		
		
		
	AnimationLibrary Editor
AnimationLibraryBook editor setup. AnimationLibrary texture2DArray generation and material setup.
This commit is contained in:
		
							
								
								
									
										8
									
								
								Editor/Scripts/Editor.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Editor/Scripts/Editor.meta
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
fileFormatVersion: 2
 | 
			
		||||
guid: 736114389a5e3ad4f8a02fdb548d5431
 | 
			
		||||
folderAsset: yes
 | 
			
		||||
DefaultImporter:
 | 
			
		||||
  externalObjects: {}
 | 
			
		||||
  userData: 
 | 
			
		||||
  assetBundleName: 
 | 
			
		||||
  assetBundleVariant: 
 | 
			
		||||
							
								
								
									
										222
									
								
								Editor/Scripts/Editor/VA_AnimationBookEditor.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										222
									
								
								Editor/Scripts/Editor/VA_AnimationBookEditor.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,222 @@
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
using UnityEditor;
 | 
			
		||||
using System.Runtime.CompilerServices;
 | 
			
		||||
using UnityEngine.Rendering.VirtualTexturing;
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace TAO.VertexAnimation.Editor
 | 
			
		||||
{
 | 
			
		||||
    [CustomEditor(typeof(VA_AnimationBook))]
 | 
			
		||||
    public class VA_AnimationBookEditor : UnityEditor.Editor
 | 
			
		||||
    {
 | 
			
		||||
        private VA_AnimationBook animationBook = null;
 | 
			
		||||
        private Vector2 textireGroupScollPos;
 | 
			
		||||
        private Vector2 animationPagesScollPos;
 | 
			
		||||
 | 
			
		||||
        private UnityEditor.Editor previewEditor = null;
 | 
			
		||||
        private int previewIndex = 0;
 | 
			
		||||
 | 
			
		||||
        void OnEnable()
 | 
			
		||||
        {
 | 
			
		||||
            animationBook = target as VA_AnimationBook;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void OnInspectorGUI()
 | 
			
		||||
        {
 | 
			
		||||
            serializedObject.Update();
 | 
			
		||||
 | 
			
		||||
            // Texture Groups.
 | 
			
		||||
            GeneralGUI();
 | 
			
		||||
            TextureGroupsGUI();
 | 
			
		||||
            SyncListSize();
 | 
			
		||||
            AnimationPagesGUI();
 | 
			
		||||
            MaterialGUI();
 | 
			
		||||
            Texture2DGUI();
 | 
			
		||||
 | 
			
		||||
            serializedObject.ApplyModifiedProperties();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void SyncListSize()
 | 
			
		||||
        {
 | 
			
		||||
            foreach (var page in animationBook.animationPages)
 | 
			
		||||
            {
 | 
			
		||||
                if(page.textures.Count < animationBook.textureGroups.Count)
 | 
			
		||||
                {
 | 
			
		||||
                    int diff = animationBook.textureGroups.Count - page.textures.Count;
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < diff; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        page.textures.Add(null);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else if(page.textures.Count > animationBook.textureGroups.Count)
 | 
			
		||||
                {
 | 
			
		||||
                    int diff = page.textures.Count - animationBook.textureGroups.Count;
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < diff; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        page.textures.RemoveRange(page.textures.Count - diff, diff);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GeneralGUI()
 | 
			
		||||
        {
 | 
			
		||||
            using (new EditorGUILayout.VerticalScope())
 | 
			
		||||
            {
 | 
			
		||||
                EditorGUILayout.LabelField("General", EditorStyles.centeredGreyMiniLabel);
 | 
			
		||||
                EditorGUILayout.PropertyField(serializedObject.FindProperty("maxFrames"));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void TextureGroupsGUI()
 | 
			
		||||
        {
 | 
			
		||||
            SerializedProperty textureGroups = serializedObject.FindProperty("textureGroups");
 | 
			
		||||
            int removeWidth = 16;
 | 
			
		||||
            int nameWidth = 152;
 | 
			
		||||
            int linearWidth = 50;
 | 
			
		||||
 | 
			
		||||
            using (new EditorGUILayout.VerticalScope())
 | 
			
		||||
            {
 | 
			
		||||
                EditorGUILayout.LabelField("TextureGroups", EditorStyles.centeredGreyMiniLabel);
 | 
			
		||||
 | 
			
		||||
                textireGroupScollPos = EditorGUILayout.BeginScrollView(textireGroupScollPos, false, false);
 | 
			
		||||
                using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
 | 
			
		||||
                {
 | 
			
		||||
                    EditorGUILayout.LabelField("", GUILayout.Width(removeWidth));
 | 
			
		||||
                    EditorGUILayout.LabelField("material parameter name", GUILayout.Width(nameWidth));
 | 
			
		||||
                    EditorGUILayout.LabelField("is linear", GUILayout.MinWidth(linearWidth));
 | 
			
		||||
                }
 | 
			
		||||
                EditorGUILayout.EndScrollView();
 | 
			
		||||
 | 
			
		||||
                for (int i = 0; i < textureGroups.arraySize; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    using (new EditorGUILayout.HorizontalScope())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (GUILayout.Button("-", GUILayout.Width(removeWidth)))
 | 
			
		||||
                        {
 | 
			
		||||
                            textureGroups.DeleteArrayElementAtIndex(i);
 | 
			
		||||
                            continue;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        EditorGUILayout.PropertyField(textureGroups.GetArrayElementAtIndex(i).FindPropertyRelative("shaderParamName"), GUIContent.none, GUILayout.Width(nameWidth));
 | 
			
		||||
                        EditorGUILayout.PropertyField(textureGroups.GetArrayElementAtIndex(i).FindPropertyRelative("isLinear"), GUIContent.none, GUILayout.MinWidth(linearWidth));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (GUILayout.Button("+", EditorStyles.miniButton))
 | 
			
		||||
                {
 | 
			
		||||
                    animationBook.textureGroups.Add(new TextureGroup
 | 
			
		||||
                    {
 | 
			
		||||
                        shaderParamName = "_ShaderPropertyName",
 | 
			
		||||
                        isLinear = false
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void AnimationPagesGUI()
 | 
			
		||||
        {
 | 
			
		||||
            SerializedProperty animationPages = serializedObject.FindProperty("animationPages");
 | 
			
		||||
            int removeWidth = 16;
 | 
			
		||||
            int nameWidth = 100;
 | 
			
		||||
            int frameWidth = 50;
 | 
			
		||||
            int textureWidth = 150;
 | 
			
		||||
 | 
			
		||||
            using (new EditorGUILayout.VerticalScope())
 | 
			
		||||
            {
 | 
			
		||||
                EditorGUILayout.LabelField("AnimationPages", EditorStyles.centeredGreyMiniLabel);
 | 
			
		||||
 | 
			
		||||
                animationPagesScollPos = EditorGUILayout.BeginScrollView(animationPagesScollPos, false, false);
 | 
			
		||||
                using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
 | 
			
		||||
                {
 | 
			
		||||
                    EditorGUILayout.LabelField("", GUILayout.Width(removeWidth));
 | 
			
		||||
                    EditorGUILayout.LabelField("name", GUILayout.Width(nameWidth));
 | 
			
		||||
                    EditorGUILayout.LabelField("frames", GUILayout.Width(frameWidth));
 | 
			
		||||
                    foreach (var t in animationBook.textureGroups)
 | 
			
		||||
                    {
 | 
			
		||||
                        EditorGUILayout.LabelField(t.shaderParamName, GUILayout.MinWidth(textureWidth));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                EditorGUILayout.EndScrollView();
 | 
			
		||||
 | 
			
		||||
                animationPagesScollPos = EditorGUILayout.BeginScrollView(animationPagesScollPos, false, false);
 | 
			
		||||
                for (int i = 0; i < animationPages.arraySize; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    using (new EditorGUILayout.HorizontalScope())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (GUILayout.Button("-", GUILayout.Width(removeWidth)))
 | 
			
		||||
                        {
 | 
			
		||||
                            animationPages.DeleteArrayElementAtIndex(i);
 | 
			
		||||
                            continue;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        EditorGUILayout.PropertyField(animationPages.GetArrayElementAtIndex(i).FindPropertyRelative("name"), GUIContent.none, GUILayout.Width(nameWidth));
 | 
			
		||||
 | 
			
		||||
                        EditorGUILayout.PropertyField(animationPages.GetArrayElementAtIndex(i).FindPropertyRelative("frames"), GUIContent.none, GUILayout.Width(frameWidth));
 | 
			
		||||
 | 
			
		||||
                        SerializedProperty textures = animationPages.GetArrayElementAtIndex(i).FindPropertyRelative("textures");
 | 
			
		||||
                        for (int t = 0; t < textures.arraySize; t++)
 | 
			
		||||
                        {
 | 
			
		||||
                            EditorGUILayout.PropertyField(textures.GetArrayElementAtIndex(t), GUIContent.none, GUILayout.MinWidth(textureWidth));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                EditorGUILayout.EndScrollView();
 | 
			
		||||
 | 
			
		||||
                if (GUILayout.Button("+", EditorStyles.miniButton))
 | 
			
		||||
                {
 | 
			
		||||
                    animationPages.InsertArrayElementAtIndex(animationPages.arraySize);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void MaterialGUI()
 | 
			
		||||
        {
 | 
			
		||||
            using (new EditorGUILayout.VerticalScope())
 | 
			
		||||
            {
 | 
			
		||||
                EditorGUILayout.LabelField("Materials", EditorStyles.centeredGreyMiniLabel);
 | 
			
		||||
                EditorGUILayout.PropertyField(serializedObject.FindProperty("materials"));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void Texture2DGUI()
 | 
			
		||||
        {
 | 
			
		||||
            if (HasPreviewGUI())
 | 
			
		||||
            {
 | 
			
		||||
                using (new EditorGUILayout.VerticalScope())
 | 
			
		||||
                {
 | 
			
		||||
                    SerializedProperty texture2DArray = serializedObject.FindProperty("texture2DArray");
 | 
			
		||||
 | 
			
		||||
                    EditorGUILayout.LabelField("Texture2DArray", EditorStyles.centeredGreyMiniLabel);
 | 
			
		||||
                    previewIndex = EditorGUILayout.IntSlider(previewIndex, 0, texture2DArray.arraySize - 1);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override bool HasPreviewGUI()
 | 
			
		||||
        {
 | 
			
		||||
            bool hasPreview = false;
 | 
			
		||||
 | 
			
		||||
            if(animationBook.texture2DArray != null && animationBook.texture2DArray.Count > 0 && animationBook.texture2DArray[previewIndex] != null)
 | 
			
		||||
            {
 | 
			
		||||
                hasPreview = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return hasPreview;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void OnPreviewGUI(Rect r, GUIStyle background)
 | 
			
		||||
        {
 | 
			
		||||
            if (previewEditor == null)
 | 
			
		||||
            {
 | 
			
		||||
                previewEditor = UnityEditor.Editor.CreateEditor(animationBook.texture2DArray[previewIndex]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            previewEditor.OnInteractivePreviewGUI(r, background);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								Editor/Scripts/Editor/VA_AnimationBookEditor.cs.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Editor/Scripts/Editor/VA_AnimationBookEditor.cs.meta
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
fileFormatVersion: 2
 | 
			
		||||
guid: 970e86c282fea004fb3b39c887587a36
 | 
			
		||||
MonoImporter:
 | 
			
		||||
  externalObjects: {}
 | 
			
		||||
  serializedVersion: 2
 | 
			
		||||
  defaultReferences: []
 | 
			
		||||
  executionOrder: 0
 | 
			
		||||
  icon: {instanceID: 0}
 | 
			
		||||
  userData: 
 | 
			
		||||
  assetBundleName: 
 | 
			
		||||
  assetBundleVariant: 
 | 
			
		||||
		Reference in New Issue
	
	Block a user