unity3d如何将物体运动轨迹记录成文件

想记录一下小汽车的运动轨迹(可以键盘控制移动)轨迹记录在excel或csv文件内。

Unity3D本身不支持直接将物体运动轨迹记录在Excel或CSV文件内,但是有多种方式可以实现。

下面介绍一种简单的实现方式:

  1. 首先,在Unity中创建一个脚本,并将其挂载到需要记录运动轨迹的物体上。在脚本中定义一个公共变量,用于记录该物体的当前位置,例如:
public class RecordPosition : MonoBehaviour
{
    public Vector3 currentPos;
    ...
    void Update()
    {
        // 每一帧记录该物体的当前位置
        currentPos = transform.position;
    }
}
  1. 接着,在脚本中定义另一个公共函数,用于将该物体每一帧的位置记录在CSV文件中。可使用StreamWriter类将数据写入CSV文件中,例如:
public class RecordPosition : MonoBehaviour
{
    ...
    public void RecordToCSV()
    {
        string filePath = Application.dataPath + "/position.csv"; // 文件路径
        StreamWriter sw = new StreamWriter(filePath, true); // 追加模式
        string line = string.Format("{0},{1},{2}", currentPos.x, currentPos.y, currentPos.z); // 将位置转化为CSV格式的一行
        sw.WriteLine(line); // 写入文件
        sw.Close(); // 关闭文件
    }
}
  1. 最后,在需要记录运动轨迹的地方(如按下某个按键)调用RecordToCSV()函数就可以将该物体的位置记录在CSV文件中了。

希望这个简单的示例可以对你有所帮助。当然,这只是一种基本的实现方式,具体实现还需要根据实际需求进行适当的修改和完善。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class RecordObjectTrajectory : MonoBehaviour
{
    public float recordRate = 0.1f; // 每隔0.1秒记录一次
    public string filePath = "trajectory.txt"; // 文件路径

    private float recordTimer;
    private StreamWriter writer;

    void Start()
    {
        // 打开文件写入器
        writer = new StreamWriter(filePath, false);
    }

    void Update()
    {
        recordTimer += Time.deltaTime;
        if (recordTimer > recordRate)
        {
            // 记录物体的位置
            writer.WriteLine(transform.position);
            recordTimer = 0;
        }
    }

    void OnApplicationQuit()
    {
        // 关闭文件写入器
        writer.Close();
    }
}

这段代码将在每隔0.1秒记录一次物体的位置,并将其写入指定的文件中。当应用程序退出时,文件写入器将关闭,确保数据已经保存到文件中。