Unity supports hex colors with TryParseHtmlString and by creating a Color32 object and feed it hex values for r, g, b and a.
Many years ago I wrote a ToColor
extension method to use in XAML apps. It converts strings like FFFF00
, #FF0000
and #FF345699
to XAML colors and brushes. I modified the code to support unity colors and here is how you can use it in your project:
StringEx
StringEx
with:using System;
using UnityEngine;
public static class StringEx
{
// Example: "#ff000099".ToColor() red with alpha ~50%
// Example: "ffffffff".ToColor() white with alpha 100%
// Example: "00ff00".ToColor() green with alpha 100%
// Example: "0000ff00".ToColor() blue with alpha 0%
public static Color ToColor(this string color)
{
if (color.StartsWith("#", StringComparison.InvariantCulture))
{
color = color.Substring(1); // strip #
}
if (color.Length == 6)
{
color += "FF"; // add alpha if missing
}
var hex = Convert.ToUInt32(color, 16);
var r = ((hex & 0xff000000) >> 0x18) / 255f;
var g = ((hex & 0xff0000) >> 0x10) / 255f;
var b = ((hex & 0xff00) >> 8) / 255f;
var a = ((hex & 0xff)) / 255f;
return new Color(r, g, b, a);
}
}
ToColor accepts:
#
charactersHere are some examples:
var red = "#ff0000".ToColor();
var green = "00FF00".ToColor();
var blue50percent = "#0000ff99".ToColor();
If you feed the function with any other format, it will crash spectacularly.