Я разрабатываю проект в Unity, в котором я использую файлы .CSV для сбора данных, которые будут использоваться в проекте. Важным фактом является то, что я разрабатываю проект с регионом операционной системы (ОС) на испанском языке sh (Испания, международный).
Я использую этот файл .CSV для перечисления действий, которые я хочу, чтобы мои персонажи выполнять в игре, например перемещаться из текущей позиции в точку A или оставаться на месте в течение X секунд. В .CSV я сохраняю данные в виде строки, но когда я добавляю их в проект, они мне нужны как float:
- MOVE: float Velocity, float Position.x, float Position.y, float Position.z
- WAIT: float Time
Любое из этих действий привязано к объекту, который получает действие и он работает отлично.
Проблема возникла, когда я отправил сборку в Steam для проверки проекта, и они уведомили меня, что они не могут двигаться дальше, потому что персонажи не двигались (игра работала, но ничего не двигалось) .
После многих тестов я обнаружил проблему. Оказывается, если ОС, в которой выполняется сборка проекта, находится в регионе, отличном от Spani sh (Испания, международный), например, в Engli sh (Великобритания), игра запускается, но ничего не меняется во времени. Первоначально программировал я.
Эта проблема возникает из-за того, что в каждом регионе своя десятичная система, например, в Испании точки используются для обозначения единиц измерения, а запятые - для обозначения десятичных знаков («1,234,24») и в Англии наоборот («1,234,24»), поэтому, если я заявляю, что мой персонаж будет ждать (WAIT) в течение «0,2» секунды (Испания), в ОС с регионом Engli sh (Великобритания), он будет "20" секунд, потому что он интерпретирует запятые как разделители единиц. То же самое происходит с действиями MOVE.
Чтобы не менять регион моей ОС, я заменил запятые на точки в .CSV, чтобы переместить проблему в свой регион и провести необходимые тесты. Таким образом, я мог доказать, что если я поставлю «3.00» (что будет 3 секунды), моя ОС интерпретирует это как 3 минуты.
Мой вопрос: как я могу решить эту проблему, чтобы таймеры работали как Я хочу, независимо от того, в каком регионе работает ОС?
Я попытался выполнить ручной синтаксический анализ от строки до float, заменив точку на запятую, но я понял, что даже если я исправлю ошибку в мой регион, он переместится в другой регион.
Есть ли способ настроить проект так, чтобы он всегда использовал определенную c систему счисления независимо от ОС? Я имею в виду, чтобы понимать запятую как десятичную дробь и использовать ее для этой цели независимо от региона.
Я пробовал System.Globalization.CultureInfo
, но ничего не получил (или не понял полностью).
Есть ли способ создать ручной парсер, работающий в любом регионе?
Большое спасибо.