Unity:从大型CSV文件中读取和更新

时间:2018-06-01 17:52:09

标签: c# csv unity3d

我有一个非常大的CSV文件(100万+行),包含四列数据timeidxy。这是一个示例:

t   id  x   y
434 84  0   0
435 84  28.22   -4.5
435 611 1895.13 755.17
435 872 2401.08 159.12
435 65  0   226.39
436 84  50.44   -4.5
436 611 1890.63 732.5
436 872 2373.9  151.04
436 990 2614.97 372.74
...

在我的模拟中,随着时间的流逝,我需要做三件事之一:

  1. 如果这是第一次出现id,在x,y坐标处创建一个具有该ID的对象

  2. 如果已存在id的对象更新该对象的x,y坐标

  3. 如果ID不再出现删除该对象

  4. 我猜测保持运行计时器非常密集,每秒检查一次CSV,找到当前时间的所有行并执行上述步骤之一。在Unity模拟中处理时间序列数据是否有更有效的方法?

1 个答案:

答案 0 :(得分:2)

对于大的文件,您应该开始寻找替代方案。这里有一些想法,但最好的选择取决于你正在做什么。

  • 更新此CSV的组件是否可以直接与Unity3d通信?使用,例如套接字连接将避免需要不断地从磁盘保存和读取此信息。但是,这取决于此CSV数据的创建方式,显然
  • 你能将csv分成更小的文件吗?例如,每个时间戳一个?这样,每步更新模拟的开销就会减少。
  • 您可以降低更新频率吗?是否必须每秒更新一次?
  • 或者,您是否只能每隔10秒读取一次CSV,然后加载下10秒的所有数据(例如,该范围内的所有时间戳),将它们存储在内存中,然后再存储到下一个数据中10秒只使用内存中的信息更新而不是再次读取文件?这将减少您对磁盘的调用。