рисую 8 окон (0-7)
фокус 0 скрол 0
фокус 1 скрол 1
фокус 2 скрол 1
фокус 3 скрол 0
фокус 4 скрол 4
фокус 5 скрол 5
фокус 6 скрол 6
фокус 7 скрол 7
Синтаксис:
Используется csharp
public class cGUI_WindowInfo : cGUI
{
protected int m_ID_Window = 0; //номер окна
protected bool m_bFocus = false; //для определения фокуса
//гуи
public override bool Set_OnGUI()
{
bool pb = true;
bool pb1 = false;
bool pVisible = false;
//предоставить номер окна ГУИ
m_ID_Window = Get_ID_GUI_Window();
string ps = "Window=" + m_ID_Window.ToString();
bool pbShow = Is_Show();
GUI.SetNextControlName(m_cParameter.m_Name);
//фокус
Event e = Event.current;
bool pFoc = m_cParameter.m_Rect.Contains(e.mousePosition);
if (pFoc && Is_Show())
{
m_bFocus = true;
}
else
{
m_bFocus = false;
}
//рисуем
if (pbShow)
{
m_cParameter.m_Rect = GUI.Window(m_ID_Window, m_cParameter.m_Rect, _Window, ps);
//_Info();
}
if (m_bFocus)
{
Set_MessageFocus(this);
}
return pb1;
} //------------------------------------------------
//закрытые------------------------------------------------
//
void _Info()
{
bool pb = false;
bool pb1 = false;
bool pb2 = false;
float pX = m_cParameter.m_Rect.left;
float pY = m_cParameter.m_Rect.top;
float pWidth = m_cParameter.m_Rect.width;
float pHeight = m_cParameter.m_Rect.height;
float pSize = m_cParameter.m_Size;
Rect pRect = m_cParameter.m_Rect;
GUI.Box(m_cParameter.m_Rect, "");
//область
GUILayout.BeginArea(pRect);
{
//скрол
m_cParameter.m_Vector2 = GUILayout.BeginScrollView(m_cParameter.m_Vector2, GUILayout.Width(pWidth), GUILayout.Height(pHeight));
{
//GUI.Box(pRect, "");
//GUI.Label(pRect, m_cParameter.m_Text);
//GUILayout.Box("");
GUILayout.Label(m_cParameter.m_Text);
}
GUILayout.EndScrollView();
}
GUILayout.EndArea();
} //------------------------------------------------
//обработка окна
protected void _Window(int fID)
{
bool pb = false;
bool pb1 = false;
bool pb2 = false;
float pX = m_cParameter.m_Rect.left;
float pY = m_cParameter.m_Rect.top;
float pWidth = m_cParameter.m_Rect.width;
float pHeight = m_cParameter.m_Rect.height;
float pSize = m_cParameter.m_Size;
int pYD = 10;
Rect pRect = new Rect(0, pYD, pWidth, pHeight - pYD);
//область
GUILayout.BeginArea(pRect);
{
//скрол
m_cParameter.m_Vector2 = GUILayout.BeginScrollView(m_cParameter.m_Vector2, GUILayout.Width(pWidth), GUILayout.Height(pHeight));
{
GUILayout.Label(m_cParameter.m_Text);
}
GUILayout.EndScrollView();
}
GUILayout.EndArea();
//устагавливаем активный фокус
if (m_bFocus)
{
GUI.FocusWindow(fID);
}
} //------------------------------------------------
} //------------------------------------------------
{
protected int m_ID_Window = 0; //номер окна
protected bool m_bFocus = false; //для определения фокуса
//гуи
public override bool Set_OnGUI()
{
bool pb = true;
bool pb1 = false;
bool pVisible = false;
//предоставить номер окна ГУИ
m_ID_Window = Get_ID_GUI_Window();
string ps = "Window=" + m_ID_Window.ToString();
bool pbShow = Is_Show();
GUI.SetNextControlName(m_cParameter.m_Name);
//фокус
Event e = Event.current;
bool pFoc = m_cParameter.m_Rect.Contains(e.mousePosition);
if (pFoc && Is_Show())
{
m_bFocus = true;
}
else
{
m_bFocus = false;
}
//рисуем
if (pbShow)
{
m_cParameter.m_Rect = GUI.Window(m_ID_Window, m_cParameter.m_Rect, _Window, ps);
//_Info();
}
if (m_bFocus)
{
Set_MessageFocus(this);
}
return pb1;
} //------------------------------------------------
//закрытые------------------------------------------------
//
void _Info()
{
bool pb = false;
bool pb1 = false;
bool pb2 = false;
float pX = m_cParameter.m_Rect.left;
float pY = m_cParameter.m_Rect.top;
float pWidth = m_cParameter.m_Rect.width;
float pHeight = m_cParameter.m_Rect.height;
float pSize = m_cParameter.m_Size;
Rect pRect = m_cParameter.m_Rect;
GUI.Box(m_cParameter.m_Rect, "");
//область
GUILayout.BeginArea(pRect);
{
//скрол
m_cParameter.m_Vector2 = GUILayout.BeginScrollView(m_cParameter.m_Vector2, GUILayout.Width(pWidth), GUILayout.Height(pHeight));
{
//GUI.Box(pRect, "");
//GUI.Label(pRect, m_cParameter.m_Text);
//GUILayout.Box("");
GUILayout.Label(m_cParameter.m_Text);
}
GUILayout.EndScrollView();
}
GUILayout.EndArea();
} //------------------------------------------------
//обработка окна
protected void _Window(int fID)
{
bool pb = false;
bool pb1 = false;
bool pb2 = false;
float pX = m_cParameter.m_Rect.left;
float pY = m_cParameter.m_Rect.top;
float pWidth = m_cParameter.m_Rect.width;
float pHeight = m_cParameter.m_Rect.height;
float pSize = m_cParameter.m_Size;
int pYD = 10;
Rect pRect = new Rect(0, pYD, pWidth, pHeight - pYD);
//область
GUILayout.BeginArea(pRect);
{
//скрол
m_cParameter.m_Vector2 = GUILayout.BeginScrollView(m_cParameter.m_Vector2, GUILayout.Width(pWidth), GUILayout.Height(pHeight));
{
GUILayout.Label(m_cParameter.m_Text);
}
GUILayout.EndScrollView();
}
GUILayout.EndArea();
//устагавливаем активный фокус
if (m_bFocus)
{
GUI.FocusWindow(fID);
}
} //------------------------------------------------
} //------------------------------------------------
но если вместо рисования окна рисую
void _Info()
то движение скрола соответствует фокусу окна.
что за беда и как с ней бороться?