我正在使用JSON文件为Unity中的游戏制作我的广告资源列表。这很好,花花公子,但现在我陷入了一个看似简单的事情。
我只是想通过JSON文件加载来改变一堆布尔/整数,因此托管自己服务器的玩家可以根据自己的风格自定义它。
这是我的旧方法,运作良好。 .....只是我拿出的重复代码。
await
现在这是我的新代码,我不想把它放在列表中,因为我不需要多次访问它。
void SetInitialReferences()
{
itemData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/StreamingAssets/Items.json"));
ConstructItemDatabase();
}
public Item FetchItemByID(int id)
{
for( int i = 0; i < dataBase.Count; i++ )
if (dataBase[i].ItemID == id)
return dataBase[i];
return null;
}
void ConstructItemDatabase()
{
for (int i = 0; i < itemData.Count; i++)
{
dataBase.Add(new Item((int)itemData[i]["id"], ...........));
}
}
public class Item
{
public int ItemID { get; set; }
..........
public Item (int itemId...............)
{
this.ItemID = itemId;
............
}
最后这是我的错误,我认为是因为我正在使用JsonMapper.ToObject,但我不知道其他任何方式。
void Start()
{
serverData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/StreamingAssets/ServerData.json"));
ChangeServerOptions();
}
public void ChangeServerOptions()
{
this.treesRespawn = (bool)serverData["TreesRespawn"];
this.rocksRespawn = (bool)serverData["RocksRespawn"];
.
.
.
.
.
}
我只需要允许非编码人员更改服务器中的设置。
这是旧的JSON:
InvalidOperationException: Instance of JsonData is not a dictionary
LitJson.JsonData.EnsureDictionary ()
LitJson.JsonData.get_Item (System.String prop_name)
Overdose.GameManager_ServerOptions.ChangeServerOptions () (at Assets/Scripts/MasterScripts/GameManager_ServerOptions.cs:61)
Overdose.GameManager_ServerOptions.Start () (at Assets/Scripts/MasterScripts/GameManager_ServerOptions.cs:53)
和新:
{
"id": 0,
"title": "G36c",
"description": "Primary Weapon. Automatic Rifle, uses 5.56 ammuntion.",
"value": 50000,
"maxQuantity": 1,
"maxSpecialQuantity" : 1,
"health": 100,
"type": "Weapon",
"secondType": "",
"specialType": "PrimaryWeapon",
"attachments": 6,
"smuggle": false,
"ammoType": "FiveAmmo",
"battery": false,
"fuel" : false,
"stackable": false,
"slug": "g36c"
},
答案 0 :(得分:0)
我明白了。
syncSystemDate = (bool)serverData[0]["SyncSystemData"];
我没有意识到它被认为是一个数组,所以我不得不添加[0]。 这让我困扰了好几个小时,而且看起来很简单,它就是.......