Как изменить цвет белого спрайта, используя значения HEX? - PullRequest
0 голосов
/ 05 июля 2019

Я пытался изменить цвет белого спрайта, используя скрипт.У меня есть HEX-клапан, который я конвертирую в RGB и пытаюсь изменить цвет спрайта.Цвет меняется, но это не совсем то, что мне нужно.Он меняется на какой-то случайный цвет.Ниже приведен код, который я пробую, я не могу понять, где я иду не так.Пожалуйста, помогите мне.Спасибо.

    string tempColor;
    tempColor = "E2270A";
    Color m_NewColor;
    float m_Red, m_Green, m_Blue;
    m_Red = System.Convert.ToInt32 (tempColor.Substring (0, 2), 16);
    m_Green = System.Convert.ToInt32 (tempColor.Substring (2, 2), 16);
    m_Blue = System.Convert.ToInt32 (tempColor.Substring (4, 2), 16);

    m_NewColor = new Color (m_Red, m_Green, m_Blue);
    Animinstance.GetComponent<SpriteRenderer> ().color = m_NewColor;

Ответы [ 3 ]

2 голосов
/ 05 июля 2019

Очень просто позвоните ColorUtility.TryParseHtmlString API, но следует добавить '#'

Color color;
if( ColorUtility.TryParseHtmlString("#E2270A", out color))
{
    Animinstance.GetComponent<SpriteRenderer>().color = color;
}
1 голос
/ 05 июля 2019

Как Джон упомянул Color принимает float значений 0.0f - 1.0f, поэтому просто разделите ваши значения на 255f, чтобы сопоставить их с соответствующими float ( %) значение.


Или вы можете просто использовать Color32 вместо этого, который принимает byte значения 0-255

var tempColor = "E2270A";
var m_Red = System.Convert.ToByte(tempColor.Substring(0, 2), 16);
var m_Green = System.Convert.ToByte(tempColor.Substring(2, 2), 16);
var m_Blue = System.Convert.ToByte(tempColor.Substring(4, 2), 16);

// always requires the alpha parameter
var m_NewColor = new UnityEngine.Color32(m_Red, m_Green, m_Blue, 255);
Animinstance.GetComponent<SpriteRenderer>().color = m_NewColor;

Color32 может быть неявно преобразовано в Color.

0 голосов
/ 05 июля 2019

Если вы посмотрите на документы для Цвет , вы заметите, что пример принимает float значения:

Color newColor = new Color(0.3f, 0.4f, 0.6f, 0.3f); // r, g, b, a

или

Color newColor = new Color(0.3f, 0.4f, 0.6f); // r, g, b

Из примеров можно сделать вывод, что Color ожидает valeus между 0 (0x00 в вашей шестнадцатеричной строке) и 1 (0xFF), но целочисленные значения этих шестнадцатеричных значений равны 0-255.Поэтому нам нужно разделить их на 255, чтобы получить значения от 0 до 1:

string tempColor;
tempColor = "E2270A";
Color m_NewColor;
float m_Red, m_Green, m_Blue;
m_Red = System.Convert.ToSingle (tempColor.Substring (0, 2), 16) / 255.0f;
m_Green = System.Convert.ToSingle (tempColor.Substring (2, 2), 16) / 255.0f;
m_Blue = System.Convert.ToSingle (tempColor.Substring (4, 2), 16) / 255.0f;

m_NewColor = new Color (m_Red, m_Green, m_Blue);
Animinstance.GetComponent<SpriteRenderer> ().color = m_NewColor;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...