2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】オブジェクトの座標値を取得してテキストファイルに書き込む

Last updated at Posted at 2021-12-08

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");
	}
}

【参考サイト】
C#でファイルの読み込みと書き込み
Unityで毎フレーム実行している処理の回数を減らす

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?