Окно редактора не открывается, если не переименовано - PullRequest
0 голосов
/ 20 апреля 2020

Я только что отлаживал EditorWindow, над которым я сейчас работал, просто таинственно перестал работать. Никакого реального сообщения об ошибке просто не появляется. Когда у меня не осталось ничего, чтобы попробовать, я сделал новое пустое окно редактора, которое работало. Затем я начал приносить все больше и больше кода из класса, который не работал. Новый работал. В конце новый код windows был идентичен. Тем не менее второй работал старый не делает. Конечно, у них разные имена, но это все.

Затем я скопировал все из нового класса в старый (даже если весь код был идентичен), а старый все еще не работает. Я пробовал это несколько раз, и я понял, что если я переименую старый класс, то это сработало! Вернитесь к старому имени, и оно не будет работать. Теперь я дал новому классу старое имя и наоборот. Тогда оба работали. Я перешел обратно. Все еще работает.

Должно быть, за кулисами происходит кое-что, что хотелось бы понять. Кто-нибудь? Имя нерабочего класса было PatternDetectionMonitor. Это не может быть зарезервированным именем. Теперь я изменил имя файла обратно на PatternDetectionMonitor, и он перестал работать. Как можно проклясть имя!

НЕ РАБОТАЕТ:

   using SDJ.Audio;
using SDJ.Audio.PatternDetection;
using SDJ.Audio.PositionTracking;
using SDJ.MessageSystem;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class PatternDetectionMonitor : EditorWindow
{
    [MenuItem("SuperStarDJ/Pattern Detection Monitor")]
    static void Init()
    {
        PatternDetectionMonitor window = (PatternDetectionMonitor)EditorWindow.GetWindow(typeof(PatternDetectionMonitor));
        window.LoadPatterns();

    }


    private void LoadPatterns()
    {
        this.patterns = patterns = Resources.LoadAll<Pattern>("RythmPatterns/");
    }

    Pattern[] patterns;
    List<DjAct> djActs;
    #region DrawArea
    float drawAreaWidth;
    float drawAreaheight;
    float drawAreaXpadding = 30f;
    float drawAreaYpadding = 100;
    float timeLineHeight = 50f;
    Rect rect;
    #endregion

    float lineLength;
    float amountOfSteps = 64;
    float stepLength;

    private void OnGUI()
    {
        Debug.Log("yä yä");

        if (patterns == null || patterns.Length == 0) return;

        drawAreaWidth = position.width - (drawAreaXpadding * 2);
        drawAreaheight = position.height - (drawAreaYpadding * 2);
        var y = position.height - drawAreaYpadding;
        rect = new Rect(0 + drawAreaXpadding, y, drawAreaWidth - (drawAreaXpadding * 2), 50);
        lineLength = rect.xMax - rect.xMin;
        stepLength = lineLength / amountOfSteps;

        for (int i = 0; i < patterns.Length; i++)
        {
            DrawTimeLine(i);
        }
        UpdateTracker();
    }

    void DrawTimeLine(int index)
    {
        var y = index * timeLineHeight;
        Handles.color = Color.white;
        //Timeline
        try
        {
            Handles.DrawLine(new Vector3(rect.xMin, rect.yMax - y), new Vector3(rect.xMax, rect.yMax - y));
        }
        catch (System.Exception e)
        {
            Debug.Log(e.Message);

        }


        DrawPattern(index);
    }


    private void DrawPattern(int patternIndex)
    {
        for (int i = 0; i < amountOfSteps; i++)
        {
            var x = rect.xMin + (i * stepLength);
            var y = rect.yMax - (timeLineHeight * patternIndex);
            var pattern = patterns[patternIndex];
            var step = pattern.Steps[i];
            PatternStepAction stepAction = step.Action;

            GUI.color = Color.black;
            var thickness = 2;

            if (stepAction == PatternStepAction.Hit)
            {
                GUI.color = new Color(0, 0, 256);
                thickness = 4;
                x -= 2;
            }

            if (step.IsCurrent)
            {
                GUI.color = new Color(50, 100, 256);
                thickness = 6;
                x -= 3;
            }

            GUI.Box(new Rect(x, y, thickness, 5), "");

            if (i % 4 == 0)
            {
                GUI.Label(new Rect(x - 8, y + 5, 20, 15), i.ToString("00"));
            }

            //if ( RythmManager.WasHitButMissedThisFrame())
            //{
            //    GUI.Label ( new Rect ( x - 8, y + 15, 20, 15 ), i.ToString ( "X" ) );
            //}
        }
    }
    void UpdateTracker()
    {
        GUI.color = Color.yellow;
        var percentage = (RythmManager.instance?.PositionInPercentage()) ?? 0;
        var trackerPosition = percentage * drawAreaWidth;
        //       var trackerPosition = ( ( float )DateTime.Now.Second / 60 ) * drawAreaWidth;
        GUI.Box(new Rect(rect.xMin + trackerPosition, rect.yMax, 2, -(patterns.Length + 1) * timeLineHeight), "");
    }
}

РАБОТАЕТ:

    using SDJ.Audio;
using SDJ.Audio.PatternDetection;
using SDJ.Audio.PositionTracking;
using SDJ.MessageSystem;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class TestWindow : EditorWindow
{
    [MenuItem("SuperStarDJ/TestWindow")]
    static void Init()
    {
        TestWindow window = (TestWindow)EditorWindow.GetWindow(typeof(TestWindow));
        window.LoadPatterns();

    }


    private void LoadPatterns()
    {
        this.patterns = patterns = Resources.LoadAll<Pattern>("RythmPatterns/");
    }

    Pattern[] patterns;
    List<DjAct> djActs;
    #region DrawArea
    float drawAreaWidth;
    float drawAreaheight;
    float drawAreaXpadding = 30f;
    float drawAreaYpadding = 100;
    float timeLineHeight = 50f;
    Rect rect;
    #endregion

    float lineLength;
    float amountOfSteps = 64;
    float stepLength;

    private void OnGUI()
    {
        Debug.Log("yä yä");

        if (patterns == null || patterns.Length == 0) return;

        drawAreaWidth = position.width - (drawAreaXpadding * 2);
        drawAreaheight = position.height - (drawAreaYpadding * 2);
        var y = position.height - drawAreaYpadding;
        rect = new Rect(0 + drawAreaXpadding, y, drawAreaWidth - (drawAreaXpadding * 2), 50);
        lineLength = rect.xMax - rect.xMin;
        stepLength = lineLength / amountOfSteps;

        for (int i = 0; i < patterns.Length; i++)
        {
            DrawTimeLine(i);
        }
        UpdateTracker();
    }

    void DrawTimeLine(int index)
    {
        var y = index * timeLineHeight;
        Handles.color = Color.white;
        //Timeline
        try
        {
            Handles.DrawLine(new Vector3(rect.xMin, rect.yMax - y), new Vector3(rect.xMax, rect.yMax - y));
        }
        catch (System.Exception e)
        {
            Debug.Log(e.Message);

        }


        DrawPattern(index);
    }


    private void DrawPattern(int patternIndex)
    {
        for (int i = 0; i < amountOfSteps; i++)
        {
            var x = rect.xMin + (i * stepLength);
            var y = rect.yMax - (timeLineHeight * patternIndex);
            var pattern = patterns[patternIndex];
            var step = pattern.Steps[i];
            PatternStepAction stepAction = step.Action;

            GUI.color = Color.black;
            var thickness = 2;

            if (stepAction == PatternStepAction.Hit)
            {
                GUI.color = new Color(0, 0, 256);
                thickness = 4;
                x -= 2;
            }

            if (step.IsCurrent)
            {
                GUI.color = new Color(50, 100, 256);
                thickness = 6;
                x -= 3;
            }

            GUI.Box(new Rect(x, y, thickness, 5), "");

            if (i % 4 == 0)
            {
                GUI.Label(new Rect(x - 8, y + 5, 20, 15), i.ToString("00"));
            }

            //if ( RythmManager.WasHitButMissedThisFrame())
            //{
            //    GUI.Label ( new Rect ( x - 8, y + 15, 20, 15 ), i.ToString ( "X" ) );
            //}
        }
    }
    void UpdateTracker()
    {
        GUI.color = Color.yellow;
        var percentage = (RythmManager.instance?.PositionInPercentage()) ?? 0;
        var trackerPosition = percentage * drawAreaWidth;
        //       var trackerPosition = ( ( float )DateTime.Now.Second / 60 ) * drawAreaWidth;
        GUI.Box(new Rect(rect.xMin + trackerPosition, rect.yMax, 2, -(patterns.Length + 1) * timeLineHeight), "");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...