Создание нового файла CSV при каждом включении скрипта в Unity 3D - PullRequest
0 голосов
/ 02 апреля 2019

Я создал сцену в Unity, используя VR, и я хочу отследить положение пользователя и сохранить его в файл CSV.Так как я хочу только Положение для определенных задач, я не хочу запускать сценарий для всей сцены.Поэтому был создан сценарий, который включает и отключает сценарий с помощью простого события OnClick для кнопки.

Итак, я создал скрипт, который включает и отключает скрипт через простое событие OnClick для кнопки.Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я отключаю сценарий и включаю его снова, не будет другого созданного CSV-файла.

Это мой код:

public class Eins : MonoBehaviour
{
    string filePath = @"";
    string filename;
    string fullPath;
    string delimiter = "\t";
    StreamWriter sw;
    string[] output;
    string finalOutput;
    public GameObject Camera;
    private float timer = 0f;

    // Start is called before the first frame update
    void Start()
    {
        filename = "Results_" + DateTime.Now.ToString("yyyy-mm-dd-hh-ss") + "_" + ".txt" + "";
        filename = filename.Replace("/", "_");
        filename = filename.Replace(":", "_");
        filename = filename.Replace(" ", "_");
        fullPath = Path.Combine(filePath, filename);
        sw = new StreamWriter(fullPath, true);
    }

    // Update is called once per frame
    public void Update()
    {
        timer += Time.deltaTime;

        output = new string[]
        {   
            timer.ToString(),

            Camera.transform.position.x.ToString(), Camera.transform.position.z.ToString()


        };

        finalOutput = String.Join(delimiter, output);
        sw.WriteLine(finalOutput);
    }

Итак, я уже выяснил, что проблема в функции запуска.Поскольку он вызывается только один раз во время работы Scene, мой файл будет создан только один раз.Но на самом деле я понятия не имею, как решить эту проблему, так как я не знаю, как получить функцию, которая будет создавать CSV-файл каждый раз, когда скрипт снова включается.

Я был бы очень признателен, если бы кто-нибудьмог бы помочь мне.

1 Ответ

0 голосов
/ 02 апреля 2019

Используйте следующий шаблон (упрощенно):

using System.IO;

public class MyClass
{
    private Stream _stream;

    private void OnDisable()
    {
        _stream?.Dispose();
    }

    private void OnEnable()
    {
        _stream = File.OpenRead("file.txt");
    }

    private void Update()
    {
        if (_stream != null)
        {
            // do something with it
        }
    }
}
...