我有来自数据的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"
]
},
答案 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);