ゲームを起動している時間内のオブジェクトのactive状態をcsvファイルに書き出す方法(Unity 2019.2.11f1)

恐らく私以外誰も使わないコードだと思うのですが,結構苦労したので記録もかねて記述しておきます.

タイトルだけだとなんのこっちゃとなるかもしれないのですが,このコードを使うとこんなファイルが出来ます.


ダウンロード

左がアクティブ状態で,右が経過時間です.オブジェクトのactiveと非activeを切り替える操作をした時,何秒目に切り替わったのかを記録したい時に役に立つと思います.なんてマイナーなコードなんだ...

オブジェクトのactive状態を取得する方法としてはこちらのサイトを参考にしました.(https://tech.pjin.jp/blog/2017/06/19/unity_gameobject_active/)

ここでは後述の理由からactiveInHierarchyを用いています.

さっそくですがコードはこちら


using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using System.IO;

using UnityEngine.UI;

public class Button_log : MonoBehaviour

{

   private float seconds;

   void Start()

   {

       seconds = 0f;

   }

   

    void Update ()

   {

       {

           

           StreamWriter sw;

           FileInfo fi;

           seconds += Time.deltaTime;

           GameObject Button = GameObject.Find("Leap Rig/Button/Capsule");

           fi = new FileInfo(Application.dataPath + "/timestart_Button.csv");

           sw = fi.AppendText();

           {

               sw.WriteLine("{0},{1}",Button.activeInHierarchy, seconds);

           }

           sw.Flush();

           sw.Close();

       }

   }

}


注意するべきは25行目のGameObject.Findのところで,ここで記述している取得対象のオブジェクトの親オブジェクトにコードを張り付けないとactive状態の時しか記録されず,false状態の記録がすっぽり抜けてしまいました.また,あとはactiveを切り替えるオブジェクトの親オブジェクトは常にactiveになっていないとそもそも記録されません(当然ですが)

そのため,親オブジェクトのactive状態に左右されないようactiveInHierarchyを用いています.

恐らくそのようなことは無いかと思いますが,誰かのお役に立てれば幸いです.

この記事が気に入ったらサポートをしてみませんか?