2015-10-08 7 views
1

У меня проблема при попытке нарисовать текстуру в графическом интерфейсе. Вот дефектный фрагмент в OnGUI():Проблема при рисовании OnGUI

var e = Event.current; 
    if (e.type == EventType.mouseDown) 
    { 
     Debug.Log("Mouse pressed"); 
     GUI.DrawTexture(new Rect(e.mousePosition.x, e.mousePosition.y, 100, 110), ButtonTexture); 
    } 

Я успешно получаю выход журнала, но не текстура не рисуется. Однако, если я использую это вне выражения if, текстура следит за моей мышью без каких-либо проблем. Я общался с этим в течение двух часов, но не могу понять, что случилось. Любая помощь будет оценена по достоинству.

Редактировать: Кажется, какой-либо чертеж не работает, если условие является событием, однако никаких проблем со стандартом if(1>0). Я также попытался использовать Input.GetMouseDown в качестве альтернативы, но такую ​​же проблему.

+0

, что происходит, когда вы 'debug.log (e.mousePosition);' – maksymiuk

+0

Я получаю правильное положение мыши, без каких-либо проблем. Опять же, все идет гладко, если я использую ту же «DrawTexture» вне инструкции 'if'. – Augure

+0

Что произойдет, если вы объявите 'Rect rect = new Rect (e.mousePosition.x, e.mousePosition.y, 100, 110);' * вне * оператора 'if', затем' GUI.DrawTexture (rect, ButtonTexture), 'внутри? – maksymiuk

ответ

1

Я думаю, что это, вероятно, потому, что mouseDown уволен один раз за клик мыши.

Event.Current покажет текущее событие, которое обрабатывает, что может быть много разных вещей на кадр, поэтому между вызовами OnGUI это, вероятно, изменится.

Лучшим подходом было бы сохранить при возникновении события mousedown и отслеживать его до тех пор, пока оно не будет выпущено, вы можете приблизиться к этому, проверив Event.Current или это Input.GetMouseButtonDown.

Вот краткий образец того, как вы могли бы отслеживать, отключена ли мышь с помощью Event.Current.

bool isMouseDown = false; 

void OnGUI() 
{ 
    EventType currentEventType = Event.current.type; 

    if (currentEventType == EventType.MouseDown) 
    { 
     isMouseDown = true; 
    } 
    else if (currentEventType == EventType.MouseUp) 
    { 
     isMouseDown = false; 
    } 

    //Use isMouseDown as appropriate... 
} 
+0

Отлично работает. – Augure

Смежные вопросы