如何在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
相关产品推荐
相关产品推荐

