我正在Unity中开发一个项目,在这个项目中,我使用.CSV文件来收集数据,以便在项目中使用。一个重要的事实是,我开发的项目的操作系统(OS)区域是西班牙语(西班牙,国际)。
我使用这个.CSV文件来列出我想让我的角色在游戏中执行的动作,比如从当前位置移动到A点,或者在该位置静止X秒。在.CSV文件中,我将数据保存为字符串,但当我在项目中引入数据时,我需要将其作为一个浮点数。
任何一个动作都被附加到一个接收动作的对象上,它都能完美执行。
问题来了,当我把构建的项目发给Steam验证时,他们通知我说无法推进,因为角色没有移动(游戏工作,但没有任何移动)。
经过多次测试,我找到了问题所在。原来,如果项目的构建执行的操作系统是在与西班牙语(西班牙,国际)不同的地区,比如在英语(英国),游戏就会运行,但在我最初编程的时间内没有任何动作。
这个问题是因为每个地区有不同的小数系统,例如,在西班牙,点用来表示单位,逗号表示小数("1.234,24"),而在英国则相反("1,234.24"),因此,如果我声明我的角色将等待(WAIT) "0,2 "秒(西班牙),在OS的英语(英国)地区,它将是 "20 "秒,因为它将逗号解释为单位分隔符。同样的情况也发生在MOVE动作上。
为了不改变我的操作系统的区域,我把.CSV中的逗号改成了点,以便把问题移到我的区域并进行必要的测试。所以我可以证明,如果我把 "3.00" (应该是3秒)我的操作系统将其解释为3分钟。
我的问题是。我怎样才能解决这个问题,使定时器按照我的要求工作,不管操作系统在哪个区域运行?
我试图通过将点改为逗号来进行从字符串到浮点的手动解析,但我意识到即使我在我的区域中修正了错误,它也会移动到另一个区域。
有没有办法配置项目,使其始终使用独立于操作系统的特定数字系统? 我的意思是,将逗号理解为小数,并将其用于该目的,无论区域是什么。
我试过 System.Globalization.CultureInfo
但我什么也没得到(或者我没有完全理解)。
有什么方法可以创建一个在任何地区都能使用的手动解析器吗?
非常感谢您。
你是在正确的路径上开始寻找System.Globalization的。你只需要使用不变的文化---------------------------------------------。CultureInfo.InvariantCulture是什么意思?-你可以指定在转换为字符串和解析字符串回到所需类型时使用它,比如。
using System.Globalization;
using System.IO;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var ci = CultureInfo.InvariantCulture;
double x = 0.123;
using(var sw=new StreamWriter("someFile"))
{
sw.Write(x.ToString(ci));
}
using (var sr=new StreamReader("someFile"))
{
string line = sr.ReadLine();
x = double.Parse(line, ci);
}
}
}
}
我想这是一个字符串问题。而我对字符串有这些基本规则。