将 rgb 字符串转换为 Color32

Convert an rgb string to a Color32

我有来自 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"
      ]
    },

这里是 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"
      ]
}

下面是一个 class 反序列化为 (Generated from 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);

获取列表中的第一个颜色并trim它

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);