Я пытаюсь создать файл сохранения, в котором сохраняются положение и скорость всех объектов на сцене, однако при вызове OnSave() редактор Unity полностью зависает и, похоже, ничего не делает.
Это мой код:
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.IO;
using System;
public class DataService : MonoBehaviour
{
string path = Directory.GetCurrentDirectory() + "/SaveFileGame.Json";
public SaveFile Saver;
public List GB_list = new List();
public List VEL_list = new List();
public List TRANS_list = new List();
public void OnSave()
{
GB_list.Clear();
VEL_list.Clear();
TRANS_list.Clear();
var componentRB = GameObject.FindObjectsByType(FindObjectsSortMode.None);//Adds all rigidbody components
for (int i = 0; i < componentRB.Length; i++)
{
if (! componentRB.gameObject.CompareTag("Player"))
{
// removes BIMOS Player objects
VEL_list.Add(componentRB.linearVelocity);//Adds velocity to list
GB_list.Add(componentRB.gameObject);//Adds GameObject to list
TRANS_list.Add(componentRB.gameObject.GetComponent().position); // Adds Transform To list
}
}
Saver.SAVED_GB = GB_list;
Saver.SAVED_VEL = VEL_list;
Saver.SAVED_TRANS = TRANS_list; // applies all lists to SaveFile script to be easily re applied to Json
if (File.Exists(path))
{
File.Delete(path);
string json = JsonConvert.SerializeObject(Saver, Formatting.Indented, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore});
File.WriteAllText(path, json); //overwrites file if it already exists
}
else
{
File.Create(path);
string json = JsonConvert.SerializeObject(Saver, Formatting.Indented, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore}); //creates new file if it doesn't
File.WriteAllText(path,json);
}
}
}
Я использовал приведенный ниже код, чтобы предотвратить цикл самоссылки. Неужели цикл просто повторяется снова и снова, вызывая сбой, но игнорируется, чтобы предотвратить ошибку?
JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore});
Изменить: это сценарий сохранения файла:
using UnityEngine;
using BIMOS;
using System.Collections.Generic;
[System.Serializable]
public class SaveFile
{
public List SAVED_GB = new List();
public List SAVED_VEL = new List();
public List SAVED_TRANS = new List();
}
Подробнее: https://stackoverflow.com/questions/799 ... ile-script