GUILable(OutLine : 외곽선추가)
GUI를 표현하는 과정에서 단색으로 처리 하면 잘 보이지 않아서
Style을 추가해서 OutLine (Stroke)처리하는 코드이다.
#if UNITY_EDITOR
private GUIStyle customStyle = null;
void Initalize()
{
if(customStyle == null)
{
customStyle= new GUIStyle(GUI.skin.box);
customStyle.normal.textColor = Color.white;
customStyle.fontSize=11;
}
}
void OnDrawGizmos()
{
Handles.BeginGUI();
DrawOutline(rect, name, 1,customStyle);
Handles.EndGUI();
}
/// <summary>
/// OutLine 생성
/// </summary>
/// <param name="r"></param>
/// <param name="t"></param>
/// <param name="strength"></param>
/// <param name="style"></param>
void DrawOutline(Rect r, string t, int strength, GUIStyle style)
{
GUI.color = new Color(0, 0, 0, 1);
int i;
for (i = -strength; i <= strength; i++)
{
GUI.Label(new Rect(r.x - strength, r.y + i, r.width, r.height), t, style);
GUI.Label(new Rect(r.x + strength, r.y + i, r.width, r.height), t, style);
}
for (i = -strength + 1; i <= strength - 1; i++)
{
GUI.Label(new Rect(r.x + i, r.y - strength, r.width, r.height), t, style);
GUI.Label(new Rect(r.x + i, r.y + strength, r.width, r.height), t, style);
}
GUI.color = new Color(1, 1, 1, 1);
GUI.Label(r, t,style);
}
#endif
DrawOutLine 코드는 간단하게 글자만큼 Loop를 돌면서
x- ~ x+
y- ~ y+
OutLine 두께 만큼 처리하는 코드로 OutLine 을 표현했다.
//OutLine
public static void DrawOutline(int outlineThickness, string labelText, GUIStyle textStyle)
{
Vector2 labelSize = textStyle.CalcSize(new GUIContent(labelText));
Rect labelRect = GUILayoutUtility.GetRect(labelSize.x, labelSize.y);
var outlineStyle = new GUIStyle(textStyle);
outlineStyle.normal.textColor = Color.black;
for (int x = -outlineThickness; x <= outlineThickness; x++)
{
for (int y = -outlineThickness; y <= outlineThickness; y++)
{
if (x == 0 && y == 0)
continue;
Rect offsetRect = new Rect(labelRect.x + (x * 0.5f), labelRect.y + (y * 0.5f), labelRect.width, labelRect.height);
GUI.Label(offsetRect, labelText, outlineStyle);
}
}
GUI.Label(labelRect, labelText, textStyle);
}
반응형
인라인 코드로 코드지만 Loop를 돌지 않고 한 라인만 생성하는 코드이다.
public static void DrawOutline(Rect _rect , string _text, GUIStyle _style , Color _outColor, Color _inColor)
{
//Stroke
_style.normal.textColor = _outColor;
_rect.x--;
GUI.Label(_rect, _text, _style);
_rect.x += 2;
GUI.Label(_rect, _text, _style);
_rect.x--;
_rect.y--;
GUI.Label(_rect, _text, _style);
_rect.y += 2;
GUI.Label(_rect, _text, _style);
_rect.y--;
//Draw Label
_style.normal.textColor = _inColor;
GUI.Label(_rect, _text, _style);
}
★☆☆☆☆
반응형
'개발 > Unity' 카테고리의 다른 글
문제해결)Unity)ReadPixels was called to read pixels from system frame buffer, while not inside drawing frame. (0) | 2022.11.02 |
---|---|
Unity) 특정 영역 스크린샷 (RectTransform ScreenShot) (0) | 2022.11.01 |
Unity)Tile Animation 적용하기 (Animated Tile) (0) | 2022.10.28 |
Unity) Android Log Cat 사용방법 (0) | 2022.10.25 |
Unity) 사운드 Pause / UnPause (0) | 2022.10.24 |
댓글