如何使用csv或txt文件中的X,Y,Z坐标绘制线?

时间:2019-03-13 17:01:21

标签: csv unity3d drawing data-visualization

,而且我很难使用CSV或TXT文件的X,Y,Z坐标在屏幕上画一条线。我尝试了线条渲染以及滑动轨迹,但是我做不到。谢谢您的帮助

1 个答案:

答案 0 :(得分:2)

  1. 例如使用StreamReader.ReadToEnd

    读取文件
    var fileContent = "";
    (using var reader = new StreamReader(path))
    {
        fileContent = reader.ReadToEnd();
    }
    
  2. 假定类似CSV / txt的内容

    23.46, 1.0, 2.4
    0.003, 7.038, 3
    
    ...
    

    解析内容,例如使用CSVReader中的SplitCSVLine

    private static string[] SplitCsvLine(string line)
    {
        return (from System.Text.RegularExpressions.Match m in System.Text.RegularExpressions.Regex.Matches(line,
            @"(((?<x>(?=[,\r\n]+))|""(?<x>([^""]|"""")+)""|(?<x>[^,\r\n]+)),?)",     
            System.Text.RegularExpressions.RegexOptions.ExplicitCapture)
            select m.Groups[1].Value).ToArray();
    }
    

    float.TryParse(string, out float)一起使用,如

    var lines = fileContent.Split('/n');
    var points = new List<Vector3>();
    foreach(var line in lines)
    {
        var parts = SplitCsvLine(line);
    
        float x = float.TryParse(parts[0], out x) ? x : 0;
        float y = float.TryParse(parts[1], out y) ? y : 0;
        float z = float.TryParse(parts[2], out z) ? z : 0;
    
        points.Add(new Vector3(x, y, z));
    }
    

    其中

    float x = float.TryParse(parts[0], out x) ? x : 0;
    

    是一种简短的写作形式

    float x;
    if(!float.TryParse(parts[0], out x))
    {
        x = 0;
    
        // Alternatively you could also declare this point as invalid
        // and not add this point at all
        continue;
    }
    

    或者,如果您知道内容仅包含那些数字符号和逗号,没有特殊字符,则也可以简单地使用

    var parts = line.Split(',');
    
  3. 最后应用这些要点,例如使用SetPositions

    LineRenderer
    GetComponent<LineRenderer>().SetPositions(points);
    

不过可能会有更有效的选择。