将RGB字符串转换为Color32

时间:2018-08-10 16:45:45

标签: c# unity3d colors tryparse

我有来自数据的JSON文件,其中包含一串color: '255,255,255'格式的RGB字符串-我想通过读取字符串并将其转换为color32为Unity中的内容着色,但是我无法弄清楚如何将它们转换为Unity需要的格式:new Color32(255,255,255,255)

如何将字符串转换为color32?

我已成功将其放入整数数组中,但尝试执行此操作时遇到cannot apply indexing with [] to an expression of type int错误:

int awayColor = team2Data.colors[0];
awayBG.color = new Color32(awayColor[0],awayColor[1],awayColor[2],255);

具有如下数据结构:

"colors": [
        [225,68,52],
        [196,214,0],
        [38,40,42]
      ]

我用来解析JSON的类是:

[System.Serializable]
    public class TeamData
    {
        public List<Team> teams = new List<Team>();
    }

    [System.Serializable]
    public class Team
    {
        public int[] colors;
        public string id;
    }

我正在使用的功能是:

string filePath = Path.Combine(Application.dataPath, teamDataFile);
//string filePath = teamDataFile;
if(File.Exists(filePath))
{
    string dataAsJson = File.ReadAllText(filePath);
    //Debug.Log(dataAsJson);
    teamData = JsonUtility.FromJson<TeamData>(dataAsJson);
}
else
{
    Debug.Log("Cannot load game data!");
}

原始JSON如下:

{
      "id": "ATL",
      "colors": [
        "225,68,52",
        "196,214,0",
        "38,40,42"
      ]
    },

1 个答案:

答案 0 :(得分:4)

这里是Color32构造函数:

public Color32(byte r, byte g, byte b, byte a) {...}

它以byte作为参数,而不是int。您将int传递给它,因为awayColor变量是int。另外,awayColor变量不是数组,但是您正在执行awayColor[0]awayColor[1]


给出以下json:

{
      "id": "ATL",
      "colors": [
        "225,68,52",
        "196,214,0",
        "38,40,42"
      ]
}

以下是将其反序列化为(this 生成)的类:

[Serializable]
public class ColorInfo
{
    public string id;
    public List<string> colors;
}

获取颜色json值

string json = "{\r\n      \"id\": \"ATL\",\r\n      \"colors\": [\r\n        \"225,68,52\",\r\n  
ColorInfo obj = JsonUtility.FromJson<ColorInfo>(json);

获取列表中的第一种颜色并进行修剪

string firstColor = obj.colors[0];
firstColor = firstColor.Trim();

用逗号将其分成3个,然后将其转换为字节数组

byte[] color = Array.ConvertAll(firstColor.Split(','), byte.Parse);

从颜色字节数组创建Color32

Color32 rbgColor = new Color32(color[0], color[1], color[2], 255);