首页 > 解决方案 > 如何使用 csv 或 txt 文件中的 X、Y、Z 坐标绘制一条线?

问题描述

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

标签: csvunity3ddrawingdata-visualization

解决方案


  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
    
    ...
    

    解析内容,例如SplitCSVLine使用CSVReader

    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. 最后将这些点应用到LineRenderer使用SetPositions

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

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


推荐阅读