StreamReader w = new StreamReader(@"d:colors.txt");
w.ReadLine();
w.Close();
文本文件行内容示例
RGBA(0.272, 0.272, 0.272, 0.500(
我想将值转换为颜色 所以我稍后可以这样做,例如:
Color c = colorFromTextFile;
如果你的字符串看起来像给定
RGBA(0.272, 0.272, 0.272, 0.500)
你可以使用
string.IndexOf
找到(
和)
string.Substring
然后提取这两者之间的字符串string.Split
最终将其切割成单独的颜色成分Single.Parse
将给定字符串解析为float
值- 将这些传递给
Color
构造函数
例如
public static bool TryParse(string input, out Color color)
{
// e.g. input = "RGBA(0.272, 0.272, 0.272, 0.500)"
color = default;
try
{
var firstChar = input.IndexOf('(') + 1;
// = 5
var lastChar = input.IndexOf(')') - 1;
// = 31
var colorDataLength = lastChar - firstCharIndex;
// 26
var colorData = input.SubString(firstChar, colorDataLength);
// = "0.272, 0.272, 0.272, 0.500"
var colorParts = colorData.Split(',');
// = string[]{"0.272", " 0.272", " 0.272", " 0.500"}
var r = float.Parse(colorParts[0].Trim());
// = 0.272f
var g = float.Parse(colorParts[1].Trim());
// = 0.272f
var b = float.Parse(colorParts[2].Trim());
// = 0.272f
var a = float.Parse(colorParts[3].Trim());
// = 0.5f
color = new Color(r, g, b, a);
return true;
}
catch(Exception e)
{
Debug.LogError($"{e.GetType()} while trying to parse string "{input}"!n{e.Message}n{e.StackTrace}");
return false;
}
}
所以你可以像这样使用它
if(TryParse("RGBA(0.272, 0.272, 0.272, 0.500)", out var color))
{
// success -> use color
someMaterial.color = color;
}
或者,正如TheGeneral在评论中提到的,您也可以将其缩短一点,并使用Regex.Matches
直接查找各个颜色组件。喜欢
var colorParts = Regex.Matches(input, @"[0-9](.[0-9]+)");
// = MatchCollection{"0.272", "0.272", "0.272", "0.500"}
在这种情况下,您不需要使用string.Trim()
因为它们已经没有空格。
是的,您还可以使用 LinqSelect
一次性对所有元素进行float.Parse
,例如
// This is basically a shortcut for doing something like
//var colorComponentsList = new List<float>();
//foreach(var part in colorParts)
//{
// colorComponentsList.Add(float.Parse(part.Value));
//}
//var colorComponents = colorComponentsList.ToArray();
var colorComponents = colorParts.Select(part => float.Parse(part.Value)).ToArray();
// = float[]{0.272f, 0.272f, 0.272f, 0.5f}
color = new Color(colorComponents[0], colorComponents[1], colorComponents[2], colorComponents[3]);
但是,如果您没有绑定到文件格式,则应以HTML颜色格式(十六进制(存储颜色
#45454580
并使用ColorUtility.TryParseHtmlString
在智能手机上输入的笔记,所以请耐心等待,但我希望这个想法:)清楚