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

我有一个数据的四列的非常大的CSV文件(100万+行)time,id,x和y。这是一个示例:


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 不再出现,则删除该对象

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


慕尼黑5688855
浏览 353回答 1
1回答

芜湖不芜

对于这么大的文件,您应该开始寻找替代方案。这里有一些想法,但最佳选择取决于您具体在做什么。更新此 CSV 的组件可以直接与 Unity3d 通信吗?使用例如套接字连接将避免需要不断地在磁盘中保存和读取此信息。但是,这取决于如何创建此 CSV 数据,显然你能把csv分成更小的文件吗?例如,每个时间戳一个?这样,每一步更新模拟的开销就会减少。你能减少更新的频率吗?是否必须每秒更新一次?或者,您是否只能每隔 10 秒读取一次 CSV,然后加载接下来 10 秒的所有数据(例如,该范围内的所有时间戳),将它们存储在内存中,然后仅在接下来的 10 秒内读取使用内存中的信息来更新而不是再次读取文件?这将减少您对磁盘的调用。
打开App,查看更多内容
随时随地看视频慕课网APP