Unity中读取CSV文件及克隆LineRenderer预制体求助
解决Unity中CSV边文件加载失败问题
出现"Failed to load CSV file"错误的核心原因是Resources.Load(file)返回了null,以下是针对性的排查和解决步骤:
1. 检查文件放置路径
Resources.Load仅能读取Assets/Resources目录及其子目录下的资源:
- 确保边CSV文件放在
Assets/Resources文件夹内(无此目录则手动创建) - 若文件在子目录(如
Resources/CSV/edges.csv),调用Read方法时传入的路径应为"CSV/edges"(无需添加.csv后缀)
2. 修正文件导入设置
选中CSV文件,在Inspector面板的Import Settings中:
- 将Text Type设置为
Text - 保持Asset Bundle默认设置(新手无需修改)
3. 修正路径传入错误
调用EdgeReader.Read()时:
- 不要携带文件后缀(例:文件为
edges.csv,传参应为"edges"而非"edges.csv") - 检查文件名拼写、大小写(Windows下不区分,但跨平台或打包时会严格校验)
4. 替换Resources.Load为直接引用(更可靠)
你的代码中_edgeFile是public变量,但static的Read方法未使用它,可改造成直接传入TextAsset的方式,规避路径问题:
// 修改Read方法为接收TextAsset参数 public static List<Dictionary<string, object>> Read(TextAsset data) { var list = new List<Dictionary<string, object>>(); if (data == null) { Debug.LogError("Edge data TextAsset is null!"); return list; } var lines = Regex.Split(data.text, LINE_SPLIT_RE); if (lines.Length <= 1) return list; var header = Regex.Split(lines[0], SPLIT_RE); for (int i = 1; i < lines.Length; i++) { var values = Regex.Split(lines[i], SPLIT_RE); if (values.Length == 0 || values[0] == "") continue; int source, target; if (!int.TryParse(values[0], out source) || !int.TryParse(values[1], out target)) { Debug.LogWarning("Failed to parse edge at line " + i); continue; } var edge = new Dictionary<string, object>(); edge["source"] = source; edge["target"] = target; list.Add(edge); } return list; }
调用时直接传入Inspector赋值的_edgeFile:
// 在初始化脚本中 EdgeReader reader = GetComponent<EdgeReader>(); var edges = EdgeReader.Read(reader._edgeFile);
5. 检查文件编码
若上述步骤无效,尝试修改CSV文件编码:
- 用记事本打开文件,选择"另存为",编码选择UTF-8(无BOM)或ASCII
- 替换原文件后重新导入Unity
内容的提问来源于stack exchange,提问作者b2xb10
相关产品推荐
相关产品推荐

