using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEngine.UI; public class TimeScaleWindow : EditorWindow { // Add menu named "My Window" to the Window menu private float weightedTimeScale = 0; [MenuItem("AddOn/TimeScale")] static void Init() { // Get existing open window or if none, make a new one: TimeScaleWindow window = (TimeScaleWindow)EditorWindow.GetWindow(typeof(TimeScaleWindow)); window.Show(); } void OnGUI() { GUILayout.Label("Base Settings", EditorStyles.boldLabel); GUILayout.BeginHorizontal(); if (GUILayout.Button("<<")) NextPower(-1); if (GUILayout.Button("<")) weightedTimeScale--; if (GUILayout.Button(">")) weightedTimeScale++; if (GUILayout.Button(">>")) NextPower(1); GUILayout.EndHorizontal(); weightedTimeScale = GUILayout.HorizontalSlider(weightedTimeScale, -100f, 100f); Time.timeScale = ConvertWeightedToRaw(weightedTimeScale); GUILayout.BeginHorizontal(); if (GUILayout.Button("Pause")) weightedTimeScale = -100; var centeredStyle = GUI.skin.GetStyle("Label"); centeredStyle.alignment = TextAnchor.UpperCenter; GUILayout.Label(DisplayString(Time.timeScale), centeredStyle); if (GUILayout.Button("Play")) Time.timeScale = 0; GUILayout.EndHorizontal(); } private float ConvertWeightedToRaw(float input) { if (input > 0) return Mathf.Lerp(1, 100, input / 100); else return Mathf.Lerp(1, 0, -input / 100); } private void NextPower(int dir) { float sign = Mathf.Sign(weightedTimeScale); Debug.Log("Sign: " + sign); float value = Mathf.Abs(weightedTimeScale + dir); Debug.Log("Value: " + value); value = Mathf.NextPowerOfTwo((int)(value)); if (Mathf.Sign(dir) != Mathf.Sign(weightedTimeScale)) value /= 2; Debug.Log("retVal: " + value + " * " + sign); weightedTimeScale = value * sign; } private void SetSpeed(float newSpeed) { Time.timeScale = newSpeed; } private string DisplayString(float input) { return input.ToString() + " (" + weightedTimeScale + ")"; if (input > 1) return Mathf.Floor(input).ToString(); else return ("1/" + Mathf.Floor(-weightedTimeScale)); } }