Unity3D中GUI窗体的移动
你提供的代码是一个Unity脚本片段,用于在游戏窗口中创建一个可拖动的窗口,并限制其在特定区域内的移动。以下是对代码的详细解释:
定义变量:
constrain:一个矩形(Rect),表示窗口可以被拖动的区域。
初始化窗口位置和大小:
window = new Rect(0, 0, 10000, 20);:创建一个新的矩形,表示窗口的位置和大小。这里设置窗口的高度为20,宽度为10000,初始位置在屏幕的左上角(0, 0)。
检查鼠标是否在可拖动区域内:
if (e.mousePosition.x > constrain.x && e.mousePosition.x < (constrain.width + constrain.x) && e.mousePosition.y > constrain.y && e.mousePosition.y < (constrain.height + constrain.y)):检查鼠标的位置是否在constrain矩形内。
限制窗口拖动:
if (e.type == EventType.MouseDown):当鼠标按下时。window = GUI.Window(id++, window, DrawWindow, "Draggable Window");:绘制窗口并启用拖动功能。
GUI.DragWindow(new Rect(0, 0, 10000, 20));:在窗口的顶部创建一个可拖动区域,宽度为10000,高度为20。
绘制窗口内容:
void DrawWindow(int windowID):定义窗口的内容。GUI.Label(new Rect(10, 10, 100, 20), "Drag me!");:在窗口的左上角显示一个标签,提示用户拖动窗口。
限制窗口大小:
if (e.type == EventType.MouseUp):当鼠标释放时。GUI.Window(id++, window, DrawWindow, "Draggable Window");:重新绘制窗口并启用拖动功能。
限制窗口移动范围:
if (e.type == EventType.MouseDown && e.button == 1):当右键按下时。window.x = Mathf.Clamp(window.x, constrain.x, constrain.width);:确保窗口的X坐标在constrain矩形内。window.y = Mathf.Clamp(window.y, constrain.y, constrain.height);:确保窗口的Y坐标在constrain矩形内。
总结:
- 这段代码创建了一个可拖动的窗口,并限制其在特定区域内的移动。
- 通过检查鼠标位置和限制窗口大小,确保窗口不会超出指定的区域。