You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何将Time.time存入列表?录制欧拉角存CSV遇CS0029错误

Unity 固定间隔录制欧拉角到CSV的错误修复方案

错误原因分析

  1. 类型不匹配错误:RecPoint方法中,TimeCount是List<float>类型,但你直接把单个float值Time.time赋值给它,导致CS0029错误,应该用Add方法将时间值添加到列表中。
  2. 缺少定时触发逻辑:原代码没有设置固定时间间隔调用RecPoint的机制,无法实现“按固定间隔录制”的需求。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:13:16