유니티 Color객체를 생성할 때, 생성자 파라미터로, rgba색상 값을 입력할 수 있다. 이때 r,g,b,a 각각의 값은 [0~1]사이의 소수점이다. 하지만 우리가 인터넷이나, 포토샵 등 원하는 색상값을 검색해 온 경우, 'FF00B5' 16진수 문자열 값을 얻어오는 경우가 많다. 이런 경우 Color객체를 생성하는 방법에 대해 알아보자.
1. String(Hex) To Color
16진수 문자열을 Color객체로 바꾸는 방법은, 16진수 문자를 각각을 [0~255]사이 숫자로 바꾸고, 그 결과를 255로 나눠주면 된다.
public static Color StrToColor(string str)
{
str = str.ToLowerInvariant();
if(str.Length == 6)
{
char[] arr = str.ToCharArray();
char[] color_arr = new char[6];
for(int i = 0 ; i < 6 ; i++)
{
if(arr[i] >= '0' && arr[i] <= '9')
color_arr[i] = (char)(arr[i] - '0');
else if(arr[i] >= 'a' && arr[i] <= 'f')
color_arr[i] = (char)(10 + arr[i] - 'a');
else
color_arr[i] = (char)0;
}
float red = (color_arr[0]*16 + color_arr[1])/255.0f;
float green = (color_arr[2]*16 + color_arr[3])/255.0f;
float blue = (color_arr[4]*16 + color_arr[5])/255.0f;
return new Color(red, green, blue);
}
else
return Color.clear;
}
2. Color To String(hex)
반대로 Color객체의 rgba값을 16진수로 얻어야 하는 경우가 있다. 예를 들어, Text의 Rich Text를 활용해, 텍스트에 색상을 넣고 싶은 경우가 그렇다.
public static string ColorToStr(Color color)
{
string r = ((int)(color.r * 255)).ToString("X2");
string g = ((int)(color.g * 255)).ToString("X2");
string b = ((int)(color.b * 255)).ToString("X2");
string a = ((int)(color.a * 255)).ToString("X2");
string result = string.Format("{0}{1}{2}{3}", r, g, b, a);
return result;
}
string grade_str = string.Format("<color=#{0}>[{1}]</color> ",
Util.ColorToStr(m_fill.color),
TextManager.Instance.GetText(type.ToString()));
m_text.text = grade_str;
이렇게, color 태그의 값으로 16진수값 문자열 값을 넣으면 된다.
'게임을 만들자 > Unity' 카테고리의 다른 글
Unity, 앱 종료 및 재시작(안드로이드) (0) | 2020.09.17 |
---|---|
Unity, c# Http Get 통신 (0) | 2020.09.08 |
Unity Ui Slider, Pointer Up 이벤트 (0) | 2020.07.19 |
Unity UI, 더블클릭, 드래그 앤 드랍 (2) | 2020.06.09 |
Unity 파티클 시스템 (0) | 2020.05.23 |