유니티 Color Hex 값 편리하게 사용하기
2024. 2. 28. 00:35ㆍUnity, C# 프로그래밍
보통 컬러값을 사용할 때 Hex 코드를 많이 사용하는데
Hex코드를 간단하게 코드에서 사용할 수 있게 하는 법을 정리했다.
보통 헥스코드는 아래처럼 되어있는데
8자리인 경우(RGBA or ARGB)도 있고 6자리(RGB)인 경우도 있다.
#FF0000FF
#86B996FF
유니티에서는 RGB만 코드로 표현하지만 실제 Alpha 값까지 지정해서 사용하는 경우가 많기 때문에
오늘은 RGBA 기준으로만 작성했다.
(코드를 보고 살짝만 수정하면 RGB or ARGB도 지원하게 만들 수 있다)
public static class ColorHex
{
/// <summary>
/// 0xRRGGBBAA
/// </summary>
public static Color32 FromRgba(uint rgba)
{
// 비트 시프트 연산을 이용해서 인자 rgba로부터 필요한 채널만 각각 분리한다.
byte r = (byte)((rgba >> 24) & 0xFF);
byte g = (byte)((rgba >> 16) & 0xFF);
byte b = (byte)((rgba >> 8) & 0xFF);
byte a = (byte)(rgba & 0xFF);
// Color32 형으로 반환 (Color 구조체로의 암시적 형변환을 지원한다)
return new Color32(r, g, b, a);
}
}
색상의 한 채널 (빨강, 초록, 파랑) 은 각각 0 ~ 255 까지의 범위를 가지고 있고
이건 1바이트(8비트)로 표현할 수 있다.
이때 rgba 4개의 채널을 모두 표현하려면 x4 해서 4바이트 내로 표현할 수 있기 때문에 4바이트 자료형인 uint를 사용했다.
사용할 때는 아래처럼 사용하면 되는데 0x 이후의 각 2자리마다 순서대로 RRGGBBAA 이렇게 사용한다.
void Start()
{
Image image = GetComponent<Image>();
image.color = ColorHex.FromRgba(0x86B996FF);
}
위 예시는 채널별로 분리하면 다음과 같다.
R:134, G:185, B:150, A:255
작성하다 보니 유니티 에디터에서는 대부분 #RRGGBB 형식으로 보여줘서
많이 사용할 것 같은 FromRgb 함수도 같이 올립니다.
FromArgb 함수가 필요하다면 위의 FromRgba 함수에서 순서만 바꿔서 읽으면 됩니다.
/// <summary>
/// 0xRRGGBB
/// </summary>
public static Color32 FromRgb(uint rgb)
{
// rgb까지는 인자에서 가져오고 a(알파) 채널은 255 고정.
byte r = (byte)((rgb >> 16) & 0xFF);
byte g = (byte)((rgb >> 8) & 0xFF);
byte b = (byte)(rgb & 0xFF);
byte a = 255;
return new Color32(r, g, b, a);
}
'Unity, C# 프로그래밍' 카테고리의 다른 글
유니티 에셋 번들 빌드 시간 단축 사례 (0) | 2024.02.01 |
---|---|
유니티 C# 개발 시 사용하기 좋은 툴 및 사이트 (2) | 2024.01.03 |
C#의 람다 (익명 함수) 사용 시 주의할 점 (2) | 2024.01.03 |
XML 데이터 로딩 최적화 사례 (1) | 2023.12.28 |
유니티 ScriptedImporter 써보기 2부 (0) | 2023.07.14 |