#c# #unity3d
#c# #unity-игровой движок
Вопрос:
В моем коде Unity есть цикл, который считывает текстовый файл .csv и добавляет содержимое в класс, который затем добавляется к объекту List.
Проблема, с которой я сталкиваюсь, заключается в том, что код в приведенном ниже методе никогда не завершается, то есть он никогда не попадает в debug.оператор log в нижней части цикла, если я пытаюсь выполнить вызов изнутри цикла, поток (я не должен называть это потоком здесь) просто останавливается, и я не получаю сообщения об ошибке в консоли.
void ReadDataFile()
{
Debug.Log(getPath() DataFileName);
string fileData = System.IO.File.ReadAllText(getPath() DataFileName);
string[] lines = fileData.Split("n"[0]);
Debug.Log("linecount from csv is : " lines.Length);
for(int n = 1;n < lines.Length; n )
{
Debug.Log("LINE=" lines[n]);
string[] linedata = (lines[n].Trim()).Split(',');
if (linedata[0] == null) break;
geoData data = new geoData();
data.Name = linedata[(int)enumField.NAME];
data.Lat = linedata[(int)enumField.LAT];
data.Long = linedata[(int)enumField.LONG];
data.LocType = linedata[(int)enumField.TYPEOFLOCATION];
data.Charts = linedata[(int)enumField.CHARTS];
data.Vhf_Tel = linedata[(int)enumField.VHF_TEL];
data.GroundtoAnchor = linedata[(int)enumField.GROUNDTOANCHOR];
data.Possibilities = linedata[(int)enumField.POSSIBILITIES];
data.Environment = linedata[(int)enumField.ENVIRONMENT];
data.Transportation = linedata[(int)enumField.TRANSPORTATION];
//add to list
PortData.Add(data);
Debug.Log(data.Name " " data.Lat " " data.LocType);
/*
float lat = (float)GeoAngle.FromDegrees(data.Lat);
float lng = (float)GeoAngle.FromDegrees(data.Long);
Debug.Log("Adding marker at:" lat " " lng);
Vector2 markerGeo = new Vector2(lat, lng);
Debug.Log("Plot vector2 is: " markerGeo);
OnlineMapsMarker3D current = control.AddMarker3D(markerGeo, MapMarker);
*/
}
Debug.Log("portdata saved to class is : " PortData.Count);
}
Комментарии:
1. Я должен также указать, что все инструкции debug внутри цикла выводят на консоль то, что я ожидаю. Это не приводит к сбою приложения, поскольку другие части приложения работают нормально. Он просто никогда не достигает последнего Debug.Log(«portdata, сохраненный в class…….
2. Пожалуйста, отредактируйте свой вопрос вместо публикации комментариев. Тем не менее, я не вижу ничего, что могло бы создать бесконечный цикл. Вы пробовали просто подключить отладчик и посмотреть, на какой строке он заблокирован?
3. Можете ли вы перенести весь код внутри файла ReadDataFile в try / catch, а затем установить точку останова в catch, чтобы увидеть, выдается ли ошибка?
4. Он останавливается, когда я пытаюсь вызвать метод вне цикла или когда цикл завершается
5. поместите Try catch внутри цикла, чтобы посмотреть, не произойдет ли что-то сбой внутри него
Ответ №1:
Всем спасибо, это было исключение из диапазона индекса, странно, что консоль Unity не обнаружила его.
Комментарии:
1. Я заметил, что Unity иногда (по крайней мере, в более старых версиях) игнорирует любое исключение, отличное от исключения с нулевой ссылкой.
2. Это в 2018.3.6, но забавно, что я не получаю никаких других «стандартных» исключений из отладки. также не регистрируется, я впервые сталкиваюсь с этим, но я решил это с помощью рекомендации try catch выше, так что все хорошо 🙂