Я только что отлаживал 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), "");
}
}