Создание нового CSV-файла каждый раз, когда скрипт включен в Unity 3D

#c# #unity3d #virtual-reality #eye-tracking

#c# #unity3d #виртуальная реальность #отслеживание глаз

Вопрос:

Я создал сцену в Unity с использованием виртуальной реальности, и я хочу отслеживать положение пользователя и сохранять его в файле 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);
    }
  

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

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

Комментарии:

1. Я не программист Unity, но мне кажется, что если скрипт запускается с кнопки, то новый файл также должен быть создан там.

Ответ №1:

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

 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
        }
    }
}