You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity3D中读取JSON文件坐标数据创建带(x,y,z)位置信息的对象

Unity3D 基于JSON批量生成游戏对象最优实现方案

实现步骤

1. 定义与JSON字段匹配的序列化数据类

Unity自带的JsonUtility要求反序列化的类添加[System.Serializable]特性,且字段名需和JSON键名完全一致:

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class ObjectData
{
    public string OBJECT_ID;
    public string OBJECT_NAME;
    public float X_COORDINATE;
    public float Y_COORDINATE;
    public float Z_COORDINATE;
    public float SPEED;
    public string OWNER;
}

// 兼容低版本Unity不支持直接解析顶级JSON数组的问题
[System.Serializable]
public class ObjectDataList
{
    public List<ObjectData> items;
}

2. 编写批量生成逻辑

提前做好要生成的对象预制体,将如下脚本挂载到场景内的管理对象上,把预制体拖到脚本对应的公开字段即可:

public class ObjectSpawnManager : MonoBehaviour
{
    // 要生成的对象预制体,Inspector面板手动赋值
    public GameObject targetPrefab;

    void Start()
    {
        SpawnObjectsByJson();
    }

    void SpawnObjectsByJson()
    {
        // 读取Resources目录下的TestFile.json,注意不需要加.json后缀
        TextAsset jsonAsset = Resources.Load<TextAsset>("TestFile");
        if (jsonAsset == null)
        {
            Debug.LogError("JSON文件读取失败,请确认TestFile.json放在Assets/Resources目录下");
            return;
        }

        // 给顶级数组套外层结构,适配低版本Unity的JsonUtility规则
        string processedJson = "{\"items\":" + jsonAsset.text + "}";
        ObjectDataList dataList = JsonUtility.FromJson<ObjectDataList>(processedJson);

        // 遍历数据批量生成对象
        foreach (var item in dataList.items)
        {
            // 实例化预制体
            GameObject spawnedObj = Instantiate(targetPrefab);
            // 设置对象名
            spawnedObj.name = $"{item.OBJECT_NAME}_{item.OBJECT_ID}";
            // 设置坐标
            spawnedObj.transform.position = new Vector3(item.X_COORDINATE, item.Y_COORDINATE, item.Z_COORDINATE);
            
            // 如果需要存储其他属性,提前给预制体挂自定义属性脚本,在此处赋值即可
            /*
            CustomObjectAttr attr = spawnedObj.GetComponent<CustomObjectAttr>();
            attr.speed = item.SPEED;
            attr.owner = item.OWNER;
            attr.objectId = item.OBJECT_ID;
            */
        }
    }
}

注意事项

  • Unity 2021及以上版本可直接用JsonUtility.FromJson<List<ObjectData>>(jsonAsset.text)解析顶级数组,不需要手动套外层结构
  • 如果JSON文件需要放在外部目录动态读取,可替换为File.ReadAllText(文件绝对路径)加载JSON字符串
  • 单次生成对象数量超过100时,建议用对象池提前初始化对象再批量赋值,减少实例化带来的性能消耗
  • 若JSON坐标系和Unity左手坐标系轴定义不同,需要手动调整坐标映射关系,比如把Y/Z轴互换:new Vector3(item.X_COORDINATE, item.Z_COORDINATE, item.Y_COORDINATE)

内容的提问来源于stack exchange,提问作者Tareq Mahmud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:27:04