public override void OnInspectorGUI() { CharAnimationController targetComp = (CharAnimationController)target; if (GUILayout.Button("Open Editor...")) { CharAnimationWindow.Init(targetComp); } if (targetComp.IsDataBroken()) { targetComp.CreateSpriteFrames(); } EditorGUI.BeginChangeCheck(); targetComp.SpriteCharSet = (Sprite)EditorGUILayout.ObjectField("SpriteCharSet", targetComp.SpriteCharSet, typeof(Sprite), false); targetComp.CharsetType = (CharAnimationController.eCharSetType)EditorGUILayout.EnumPopup("Charset Type", targetComp.CharsetType); if (EditorGUI.EndChangeCheck()) { targetComp.CreateSpriteFrames(); } targetComp.TargetSpriteRenderer = (SpriteRenderer)EditorGUILayout.ObjectField("Target Sprite Render", targetComp.TargetSpriteRenderer, typeof(SpriteRenderer), true); targetComp.AnimSpeed = EditorGUILayout.FloatField("Anim Speed", targetComp.AnimSpeed); targetComp.IsPingPongAnim = EditorGUILayout.ToggleLeft("Ping-Pong Anim", targetComp.IsPingPongAnim); targetComp.CurrentDir = (CharAnimationController.eDir)EditorGUILayout.EnumPopup("Facing Dir", targetComp.CurrentDir); EditorGUILayout.PropertyField(serializedObject.FindProperty("IsAnimated")); EditorGUILayout.PropertyField(serializedObject.FindProperty("PixelsPerUnit")); serializedObject.ApplyModifiedProperties(); if (GUI.changed) { EditorUtility.SetDirty(targetComp); } }
public static void Init( CharAnimationController animCtrl ) { // Get existing open window or if none, make a new one: CharAnimationWindow window = (CharAnimationWindow)EditorWindow.GetWindow(typeof(CharAnimationWindow), false, "Char. Animation"); if (animCtrl.CreateSpriteFrames()) { window.m_gridSize = animCtrl.GetSpriteFrames()[0].rect.width / 4; } window.m_animCtrl = animCtrl; window.Show(); }
public static void Init(CharAnimationController animCtrl) { // Get existing open window or if none, make a new one: CharAnimationWindow window = (CharAnimationWindow)EditorWindow.GetWindow(typeof(CharAnimationWindow), false, "Char. Animation"); if (animCtrl.CreateSpriteFrames()) { window.m_gridSize = animCtrl.GetSpriteFrames()[0].rect.width / 4; } window.m_animCtrl = animCtrl; window.Show(); }
public static void CreateCharacter() { GameObject obj = new GameObject("Character"); CharAnimationController CharAnimationController = obj.AddComponent <CharAnimationController>(); GameObject spriteObj = new GameObject("Sprite"); spriteObj.transform.parent = obj.transform; SpriteRenderer sprRenderer = spriteObj.AddComponent <SpriteRenderer>(); CharAnimationController.TargetSpriteRenderer = sprRenderer; Selection.activeObject = obj; Camera sceneCam = SceneView.currentDrawingSceneView.camera; obj.transform.position = sceneCam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 10f)); obj.transform.position = new Vector3(obj.transform.position.x, obj.transform.position.y, -0.5f); }
void OnGUI() { // Change m_animCtrl if another object is selected with this component attached if (m_prevSelectedGameObject != Selection.activeGameObject) { CharAnimationController animCtrl = Selection.activeGameObject != null?Selection.activeGameObject.GetComponent <CharAnimationController>() : null; if (animCtrl != null) { m_animCtrl = animCtrl; if (animCtrl.CreateSpriteFrames()) { m_gridSize = animCtrl.GetSpriteFrames()[0].rect.width / 4; } } } m_prevSelectedGameObject = Selection.activeGameObject; if (m_animCtrl == null) { Close(); return; } if (m_animCtrl.IsDataBroken()) { m_animCtrl.CreateSpriteFrames(); } if (s_gridTex == null) { s_gridTex = new Texture2D(2, 2); s_gridTex.wrapMode = TextureWrapMode.Repeat; s_gridTex.filterMode = FilterMode.Point; s_gridTex.SetPixels32(new Color32[] { m_gridColor0, m_gridColor1, m_gridColor1, m_gridColor0 }); s_gridTex.Apply(); } Repaint(); if (Event.current.type == EventType.Repaint) { float timeDt = Time.realtimeSinceStartup - m_prevDt; m_prevDt = Time.realtimeSinceStartup; if (!Application.isPlaying) { m_animCtrl.UpdateAnim(timeDt); } m_walkAnimTimer -= timeDt * m_walkSpeed; while (m_walkAnimTimer <= 0f) { m_walkAnimTimer += 1f; } m_walkAnimTimer %= 1; } else if (Event.current.type == EventType.scrollWheel && m_rGridView.Contains(m_mousePos)) { float prevZoom = m_zoom; if (Event.current.delta.y > 0) // back { if (m_zoom > 1f) { m_zoom = Mathf.Max(m_zoom - 1, 1); } else { m_zoom = Mathf.Max(m_zoom / 2f, 0.05f); } } else if (Event.current.delta.y < 0) // forward { if (m_zoom >= 1f) { m_zoom = Mathf.Min(m_zoom + 1, 10); } else { m_zoom *= 2f; } } m_zoom = Mathf.Clamp(m_zoom, 1f, 5f); if (prevZoom != m_zoom) { Vector2 vZoomCenter = (m_mousePos - m_rGridView.position); m_vTrans += (prevZoom - m_zoom) * vZoomCenter / (prevZoom * m_zoom); } } else if (Event.current.type == EventType.MouseDrag && m_rGridView.Contains(m_mousePos)) { m_vTrans += Event.current.delta / m_zoom; } m_mousePos = Event.current.mousePosition; DrawGUI(); if (GUI.changed) { EditorUtility.SetDirty(m_animCtrl); } }
void OnGUI() { // Change m_animCtrl if another object is selected with this component attached if (m_prevSelectedGameObject != Selection.activeGameObject) { CharAnimationController animCtrl = Selection.activeGameObject != null? Selection.activeGameObject.GetComponent<CharAnimationController>() : null; if( animCtrl != null ) { m_animCtrl = animCtrl; if (animCtrl.CreateSpriteFrames()) { m_gridSize = animCtrl.GetSpriteFrames()[0].rect.width / 4; } } } m_prevSelectedGameObject = Selection.activeGameObject; if (m_animCtrl == null) { Close(); return; } if (m_animCtrl.IsDataBroken()) m_animCtrl.CreateSpriteFrames(); if (s_gridTex == null) { s_gridTex = new Texture2D(2, 2); s_gridTex.wrapMode = TextureWrapMode.Repeat; s_gridTex.filterMode = FilterMode.Point; s_gridTex.SetPixels32(new Color32[] { m_gridColor0, m_gridColor1, m_gridColor1, m_gridColor0 }); s_gridTex.Apply(); } Repaint(); if( Event.current.type == EventType.Repaint) { float timeDt = Time.realtimeSinceStartup - m_prevDt; m_prevDt = Time.realtimeSinceStartup; if (!Application.isPlaying) m_animCtrl.UpdateAnim(timeDt); m_walkAnimTimer -= timeDt * m_walkSpeed; while (m_walkAnimTimer <= 0f) m_walkAnimTimer += 1f; m_walkAnimTimer %= 1; } else if( Event.current.type == EventType.scrollWheel && m_rGridView.Contains(m_mousePos) ) { float prevZoom = m_zoom; if (Event.current.delta.y > 0) // back { if (m_zoom > 1f) m_zoom = Mathf.Max(m_zoom - 1, 1); else m_zoom = Mathf.Max(m_zoom / 2f, 0.05f); } else if (Event.current.delta.y < 0) // forward { if (m_zoom >= 1f) m_zoom = Mathf.Min(m_zoom + 1, 10); else m_zoom *= 2f; } m_zoom = Mathf.Clamp(m_zoom, 1f, 5f); if (prevZoom != m_zoom) { Vector2 vZoomCenter = (m_mousePos - m_rGridView.position); m_vTrans += (prevZoom - m_zoom) * vZoomCenter / (prevZoom * m_zoom); } } else if (Event.current.type == EventType.MouseDrag && m_rGridView.Contains(m_mousePos)) { m_vTrans += Event.current.delta / m_zoom; } m_mousePos = Event.current.mousePosition; DrawGUI(); if( GUI.changed ) { EditorUtility.SetDirty(m_animCtrl); } }