2017-02-22 15 views
0

Как создать интерактивный объект GUI в Unity - Окно редактора?Как заставить четырехугольники сделать перетаскивание в окне редактора Unity?

enter image description here

я могу сделать статический четырехугольник как код ниже. Но мне нужен эффект, как reference video, который начинается с 0:22 по 0:30.

public class EditorCanvas { 
    public static void DrawQuad(int x, int y, int width, int height, Color color) { 
     Rect rect = new Rect(x, y, width, height); 
     Texture2D texture = new Texture2D(1, 1); 
     texture.SetPixel(0, 0, color); 
     texture.Apply(); 
     GUI.skin.box.normal.background = texture; 
     GUI.Box(rect, GUIContent.none); 
    } 
} 


public class MyWindow : EditorWindow { 
    void OnGUI() { 
     EditorCanvas.DrawQuad(100, 75, 50, 50, Color.black); 
    } 
} 

ответ

1

Вы можете объявить прямоугольник, который содержит текущую позицию вашего окна. В этом примере позиция инициализируется до 0,0 для размера 100,100.

Затем для каждого перемещения мыши при нажатии (EventType.MouseDrag) вы добавляете движение мыши со времени последнего события (Event.delta) в позицию поля.

Чтобы получить плавное перетащить & капля, вы должны сообщить единству, что у вас есть событие, чтобы он мог перерисовать. (Event.use)

Rect _boxPos = new Rect(0, 0, 100, 100); 

void OnGUI() 
{ 
    if (Event.current.type == EventType.MouseDrag && 
     _boxPos.Contains(Event.current.mousePosition)) 
    { 
     _boxPos.position += Event.current.delta; 
    } 

    GUI.Box(_boxPos, "test"); 

    if (Event.current.isMouse) 
     Event.current.Use(); 
} 

Итак, теперь вы можете легко адаптировать метод DrawQuad.