Unity中如何将Time.time存入列表?录制欧拉角存CSV遇CS0029错误
Unity 固定间隔录制欧拉角到CSV的错误修复方案
错误原因分析
- 类型不匹配错误:
RecPoint方法中,TimeCount是List<float>类型,但你直接把单个float值Time.time赋值给它,导致CS0029错误,应该用Add方法将时间值添加到列表中。 - 缺少定时触发逻辑:原代码没有设置固定时间间隔调用
RecPoint的机制,无法实现“按固定间隔录制”的需求。 - CSV生成逻辑错误:直接用
Concat拼接两个列表会得到一维数组,无法生成左列时间、右列角度的CSV结构。
修正后的完整代码
using UnityEngine; using System.Collections.Generic; using System.IO; public class ConcatArray : MonoBehaviour { public string fileName = "Assets/Resources/test.csv"; // 改为csv后缀更规范 private List<float> AnglesOne; private List<float> TimeCount; void Start() { AnglesOne = new List<float>(); TimeCount = new List<float>(); // 启动定时录制:0秒后开始,每0.1秒调用一次RecPoint(间隔可自行调整) InvokeRepeating("RecPoint", 0f, 0.1f); } void RecPoint() { // 记录Z轴欧拉角 AnglesOne.Add(transform.eulerAngles.z); // 记录当前时间(修复类型不匹配错误) TimeCount.Add(Time.time); } void SaveToFile(string fileName) { // 构建CSV内容,首行写表头 var csvContent = "时间,欧拉角Z\n"; // 遍历两个列表,逐行写入时间和对应角度 for (int i = 0; i < TimeCount.Count; i++) { csvContent += $"{TimeCount[i]},{AnglesOne[i]}\n"; } // 写入文件 File.WriteAllText(fileName, csvContent); } void OnGUI() { if (GUI.Button(new Rect(10, 10, 120, 30), "停止并保存")) { CancelInvoke("RecPoint"); // 停止录制 SaveToFile(fileName); // 保存CSV } } }
关键修改说明
- 定时录制:通过
InvokeRepeating实现固定间隔触发录制,第三个参数是间隔时间(单位:秒),可根据需求调整。 - 修复类型错误:将
TimeCount = Time.time;替换为TimeCount.Add(Time.time);,正确将时间值添加到列表中。 - CSV格式生成:逐行拼接时间和角度,生成标准的两列CSV结构,首行添加表头方便后续查看。
- 文件格式优化:将文件名后缀改为
.csv,符合CSV文件的规范,方便用表格软件直接打开。
内容的提问来源于stack exchange,提问作者UniMYPAM
相关产品推荐
相关产品推荐

