float.Parse 在不同语言下,小数点表示是不一样的,需要处理不同语言的问题。俄语,法语,德文、印尼文、越南文、葡萄牙语等都是不用.表示小数点 ;进一步研究发现,U3D新版本(2020之后版本)中使用了C#的新特性,自适应每种语言的浮点数标准化。
num = float.Parse(vl);
遇到一个多语言问题同步一下。就是有些语言小数点分隔符并不是".", 如果我们直接用float.parse强转我们类似“0.1”这种字符串,会报"input string was not in a correct format"(输入字符串的格式不正确)错误。
举个例子:
0.5.ToString();
这个很基础的字符串转化函数,在英语和中文环境下出来的结果是:0.5
但是!俄语、法语、德语中出现的结果是:0,5。很明显可以看出'.'变成了','
解决方案一:
public static float StringConvertFloat(string str)
{
float num = 0;
if (string.IsNullOrEmpty(str))
return num;
string[] strNums = str.Split('.');
if (strNums.Length <= 0)
return num;
if(strNums.Length < 2)
{
num = float.Parse(strNums[0]);
}
else
{
num = float.Parse(strNums[0]) + float.Parse(strNums[1]) / Mathf.Pow(10, strNums[1].Length);
}
return num;
}
解决方案二:
因此我们的解决办法是在启动函数里加上这么一句话,让游戏主线程强制转化为英语环境:
System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("en-US");