Unityのシーン実行時にこのスクリプトをアタッチしたオブジェクトの座標(x,y,z)を取得し,テキストファイルに書き込むコードの例です.
RecordPos.cs
using UnityEngine;
using System.Collections;
using System.IO; //ファイルに書き込むために必要
using System; //Convertを使うために必要
public class RecordPos : MonoBehaviour
{
void Start(){}
void Update()
{
//transformを取得
Transform myTransform = this.transform;
//ワールド座標を基準にスクリプトをアタッチしたオブジェクトの座標を取得
Vector3 worldPos = myTransform.position;
float x = worldPos.x;
float y = worldPos.y;
float z = worldPos.z;
//ファイルパスを定義
string filePath = Application.dataPath + @"\Scripts\File\ObjectPos.txt";
//ファイルの末尾に値を追加(Convertでfloat型の座標値をString型に変換している)
File.AppendAllText(filePath, Convert.ToString(x)+","+ Convert.ToString(y)+","+ Convert.ToString(z) + "\n");
}
}
出力先のテキストファイルをMATLAB等で読み込めば良い感じのグラフが描けそう.
上の例のようにUpdate関数内で書き込みするとサンプル数が多すぎるので改善の余地あり.
【追記】
1秒ごとにテキストに記入するように変更を加えたコードの例.Prefab生成タイミングも記述するようにした.
RecordPos.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO; //ファイルに書き込むために必要
using System; //Convertを使うために必要
public class RecordPos : MonoBehaviour
{
private float elapsedTime;
[SerializeField]
private float timeWriteTxt = 1f; //WriteTxtを実行する周期
void Start()
{
//ファイルパスを定義
string filePath = Application.dataPath + @"\ObjectPos.txt";
//ファイルの末尾にPrefabが新しく生成されたことを示すメッセージを追加
File.AppendAllText(filePath, "Prefabが新しく生成されました!\n");
}
void Update()
{
//時間を数えてtimeWriteTxtの時間になったらWriteTxt関数を実行
elapsedTime += Time.deltaTime;
if (elapsedTime >= timeWriteTxt)
{
elapsedTime = 0f; //時間リセット
WriteTxt();
}
}
void WriteTxt()
{
//transformを取得
Transform myTransform = this.transform;
//ワールド座標を基準にスクリプトをアタッチしたオブジェクトの座標を取得
Vector3 worldPos = myTransform.position;
float x = worldPos.x;
float y = worldPos.y;
float z = worldPos.z;
//ファイルパスを定義
string filePath = Application.dataPath + @"\ObjectPos.txt";
//ファイルの末尾に値を追加(Convertでfloat型の座標値をString型に変換している)
File.AppendAllText(filePath, Convert.ToString(x)+","+ Convert.ToString(y)+","+ Convert.ToString(z) + "\n");
}
}