unity2d json 储存 对象所有子集 子集类型为预制体 的代码
以下是一个示例代码,可以将一个对象及其所有子集中类型为预制体的子集的信息保存为JSON格式的文件。
using UnityEngine;
using System.Collections.Generic;
using System.IO;
public class SavePrefabData : MonoBehaviour
{
[SerializeField] private GameObject targetObject;
[SerializeField] private string saveFileName = "prefab_data.json";
private List<PrefabData> prefabDataList = new List<PrefabData>();
private void Start()
{
SavePrefabDataRecursive(targetObject.transform);
SaveJsonData();
}
private void SavePrefabDataRecursive(Transform transform)
{
foreach (Transform childTransform in transform)
{
GameObject childGameObject = childTransform.gameObject;
if (childGameObject.GetComponent<PrefabData>() != null)
{
prefabDataList.Add(childGameObject.GetComponent<PrefabData>());
}
if (childGameObject.transform.childCount > 0)
{
SavePrefabDataRecursive(childTransform);
}
}
}
private void SaveJsonData()
{
string jsonData = JsonUtility.ToJson(prefabDataList.ToArray(), true);
File.WriteAllText(Application.dataPath + "/" + saveFileName, jsonData);
}
}
这个代码中,我们首先定义了一个 targetObject,这个对象及其子集中的预制体数据将会被保存。我们还定义了一个 saveFileName,用于指定保存出的文件名。
在 Start 函数中,我们首先调用了 SavePrefabDataRecursive 函数,这个函数通过递归遍历 targetObject 及其所有子集,找到其中所有类型为 PrefabData 的子集,并将其信息添加到 prefabDataList 中。之后我们再调用 SaveJsonData 函数将 prefabDataList 中的数据保存为JSON格式的文件。
在 SavePrefabDataRecursive 函数中,我们首先检查当前子集是否有 PrefabData 组件,并将其添加到列表中。之后我们递归调用 SavePrefabDataRecursive 函数,继续遍历子集。
最后,在 SaveJsonData 函数中,我们将 prefabDataList 中的数据使用 JsonUtility 转换为JSON格式的字符串,然后使用 File.WriteAllText 函数将其保存到指定的文件中。
需要注意的是,这个代码中假设 PrefabData 组件中的数据是可以直接通过 JsonUtility 转换为JSON格式的,如果 PrefabData 中包含了不支持的数据类型,保存操作将会失败。如果需要保存复杂的数据结构,可以考虑使用其他的JSON库
原文地址: http://www.cveoy.top/t/topic/htKf 著作权归作者所有。请勿转载和采集!