Поток процесса исчезает из цикла в unity

#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 выше, так что все хорошо 🙂