유니티 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진수값 문자열 값을 넣으면 된다.

 

 

물약을 지니리

댓글을 달아 주세요