以下是一个示例代码,可以将一个对象及其所有子集中类型为预制体的子集的信息保存为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库

unity2d json 储存 对象所有子集 子集类型为预制体 的代码

原文地址: http://www.cveoy.top/t/topic/htKf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录