当前位置: 首页 > news >正文

上海公安局官网信息关键词优化步骤简短

上海公安局官网信息,关键词优化步骤简短,wordpress 解压,深圳做网站的当在Unity游戏中需要加载和管理游戏数据,通常使用JSON文件是一种常见的方法。在本篇博客中,我们将深入探讨如何使用C#和Unity的JSON反序列化功能来实现这一目标。我们可以使用Unity的JsonUtility来反序列化JSON数据并将其映射到自定义的C#数据结构中。 …

当在Unity游戏中需要加载和管理游戏数据,通常使用JSON文件是一种常见的方法。在本篇博客中,我们将深入探讨如何使用C#和Unity的JSON反序列化功能来实现这一目标。我们可以使用Unity的JsonUtility来反序列化JSON数据并将其映射到自定义的C#数据结构中。

首先,让我们来创建一些数据类,以便加载和管理游戏中的角色和武器数据。在这个示例中,我们将使用Player(角色)、Monster(怪物)和WeaponData(武器数据)这三种数据类型。

{"players": [{"id": "1","name": "player0","weaponID": "102","maxHp": "50","damage": "0","defense": "0","moveSpeed": "5.0","coolDown": "0","amount": "0"},{"id": "2","name": "player1","weaponID": "101","maxHp": "40","damage": "-10","defense": "0","moveSpeed": "5","coolDown": "20","amount": "0"},{"id": "3","name": "player2","weaponID": "101","maxHp": "50","damage": "20","defense": "1","moveSpeed": "5.0","coolDown": "-50","amount": "1"},{"id": "4","name": "player3","weaponID": "102","maxHp": "50","damage": "-50","defense": "-1","moveSpeed": "6","coolDown": "100","amount": "0"}]
} 

我们需要创建了具有与JSON数据匹配的数据结构。这些类使用[Serializable]特性,以便能够进行JSON序列化和反序列化

[Serializable]public class Monster{public int id;public string name;public int maxHp;public int damage;public int defense;public float moveSpeed;public int expMul;}`在这里插入代码片`

通过观察JSON文件我们发现,这个JSON文件示例是一个包含多个玩家信息的数组。

[Serializable]public class PlayerData{public List<Player> players = new List<Player>();}

我们可以用一个玩家数据结构的数组去存储这个json文件,并

TextAsset textAsset = Managers.Resource.Load<TextAsset>($"Data/PlayerData");
PlayerData []players JsonUtility.FromJson<Loader>(textAsset.text);

去解析并且遍历它放到字典里,
当我们要解析的json特别多时 我们定义了一个泛型方法LoadJson,该方法负责加载JSON数据并将其反序列化为具体类型的字典。这个方法接受一个Loader类型,该类型必须实现ILoader接口。

 Loader LoadJson<Loader, Key, Value>(string path) where Loader : ILoader<Key, Value>{TextAsset textAsset = Managers.Resource.Load<TextAsset>($"Data/{path}");return JsonUtility.FromJson<Loader>(textAsset.text);}

ILoader接口

public interface ILoader<Key, Value>
{Dictionary<Key, Value> MakeDict();
}

我们让存储具有JSON数据结构的数组继承该接口

	[Serializable]public class PlayerData : ILoader<int, Player>{public List<Player> players = new List<Player>();public Dictionary<int, Player> MakeDict(){Dictionary<int, Player> dict = new Dictionary<int, Player>();foreach (Player player in players)dict.Add(player.id, player);return dict;}}

这样就可以将JSON文件反序列化放在数组中

 public Dictionary<int, Data.WeaponData> WeaponData { get; private set; } = new Dictionary<int, Data.WeaponData>();public Dictionary<int, Data.Player> PlayerData { get; private set; } = new Dictionary<int, Data.Player>();public Dictionary<int, Data.Monster> MonsterData { get; private set; } = new Dictionary<int, Data.Monster>();public void Init(){PlayerData = LoadJson<Data.PlayerData, int, Data.Player>("PlayerData").MakeDict();WeaponData = LoadJson<Data.WeaponDataLoader, int, Data.WeaponData>("WeaponData").MakeDict();MonsterData = LoadJson<Data.MonsterData, int, Data.Monster>("MonsterData").MakeDict();}

代码如下

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public interface ILoader<Key, Value>
{Dictionary<Key, Value> MakeDict();
}public class DataManager
{public Dictionary<int, Data.WeaponData> WeaponData { get; private set; } = new Dictionary<int, Data.WeaponData>();public Dictionary<int, Data.Player> PlayerData { get; private set; } = new Dictionary<int, Data.Player>();public Dictionary<int, Data.Monster> MonsterData { get; private set; } = new Dictionary<int, Data.Monster>();public void Init(){PlayerData = LoadJson<Data.PlayerData, int, Data.Player>("PlayerData").MakeDict();WeaponData = LoadJson<Data.WeaponDataLoader, int, Data.WeaponData>("WeaponData").MakeDict();MonsterData = LoadJson<Data.MonsterData, int, Data.Monster>("MonsterData").MakeDict();}Loader LoadJson<Loader, Key, Value>(string path) where Loader : ILoader<Key, Value>{TextAsset textAsset = Managers.Resource.Load<TextAsset>($"Data/{path}");return JsonUtility.FromJson<Loader>(textAsset.text);}}

在DataManager的Init方法中,我们加载并初始化了游戏数据,包括角色数据、武器数据和怪物数据。通过调用LoadJson泛型方法,我们可以轻松地加载各种类型的JSON数据并将其转化为字典对象。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace Data
{#region Character[Serializable]public class Player{public int id;public string name;public int weaponID;public int maxHp;public int damage;public int defense;public float moveSpeed;public int coolDown;public int amount;}[Serializable]public class PlayerData : ILoader<int, Player>{public List<Player> players = new List<Player>();public Dictionary<int, Player> MakeDict(){Dictionary<int, Player> dict = new Dictionary<int, Player>();foreach (Player player in players)dict.Add(player.id, player);return dict;}}#endregion#region Monster[Serializable]public class Monster{public int id;public string name;public int maxHp;public int damage;public int defense;public float moveSpeed;public int expMul;}public class MonsterData : ILoader<int, Monster>{public List<Monster> monsters = new List<Monster>();public Dictionary<int, Monster> MakeDict(){Dictionary<int, Monster> dict = new Dictionary<int, Monster>();foreach (Monster monster in monsters)dict.Add(monster.id, monster);return dict;}}#endregion#region Weapon[Serializable]public class WeaponData{public int weaponID;public string weaponName;public List<WeaponLevelData> weaponLevelData = new List<WeaponLevelData>();}[Serializable]public class WeaponLevelData{public int level;public int damage;public float movSpeed;public float force;public float cooldown;public float size;public int penetrate;public int countPerCreate;}[Serializable]public class WeaponDataLoader : ILoader<int, WeaponData>{public List<WeaponData> weapons = new List<WeaponData>();public Dictionary<int, WeaponData> MakeDict(){Dictionary<int, WeaponData> dict = new Dictionary<int, WeaponData>();foreach (WeaponData weapon in weapons)dict.Add(weapon.weaponID, weapon);return dict;}}#endregion}

通过使用Unity的JsonUtility和C#的泛型方法,我们可以方便地加载和管理游戏数据。这种方法对于处理不同类型的数据非常有用,而且代码可复用性很高。希望这篇博客对你了解Unity中的JSON反序列化和数据管理有所帮助。如果你有任何问题或需要进一步的指导,请随时在评论中提问!


文章转载自:
http://bitterweed.rdbj.cn
http://gratitude.rdbj.cn
http://hammerhead.rdbj.cn
http://proprietarian.rdbj.cn
http://symptomatic.rdbj.cn
http://proliferate.rdbj.cn
http://langouste.rdbj.cn
http://canthus.rdbj.cn
http://surrebutter.rdbj.cn
http://endopsychic.rdbj.cn
http://pentachlorophenol.rdbj.cn
http://undersecretary.rdbj.cn
http://captive.rdbj.cn
http://concessive.rdbj.cn
http://metalaw.rdbj.cn
http://xeromorphous.rdbj.cn
http://unyielding.rdbj.cn
http://imputable.rdbj.cn
http://tamableness.rdbj.cn
http://thermidor.rdbj.cn
http://cucurbitaceous.rdbj.cn
http://kneed.rdbj.cn
http://praxiology.rdbj.cn
http://feudalization.rdbj.cn
http://overpersuade.rdbj.cn
http://phlegmon.rdbj.cn
http://newfound.rdbj.cn
http://vietnamization.rdbj.cn
http://cursillo.rdbj.cn
http://ricey.rdbj.cn
http://phytotaxonomy.rdbj.cn
http://zooplastic.rdbj.cn
http://buhrstone.rdbj.cn
http://cocytus.rdbj.cn
http://restrictionism.rdbj.cn
http://broadloom.rdbj.cn
http://minimal.rdbj.cn
http://rapine.rdbj.cn
http://bioscope.rdbj.cn
http://dephosphorize.rdbj.cn
http://orville.rdbj.cn
http://forever.rdbj.cn
http://ritual.rdbj.cn
http://pickapack.rdbj.cn
http://quaternize.rdbj.cn
http://bruce.rdbj.cn
http://powdery.rdbj.cn
http://ceinture.rdbj.cn
http://patroclus.rdbj.cn
http://smileless.rdbj.cn
http://offenseless.rdbj.cn
http://soul.rdbj.cn
http://unscathed.rdbj.cn
http://pamiri.rdbj.cn
http://teleset.rdbj.cn
http://horticulture.rdbj.cn
http://decay.rdbj.cn
http://smileless.rdbj.cn
http://hallah.rdbj.cn
http://predigestion.rdbj.cn
http://samba.rdbj.cn
http://bluebill.rdbj.cn
http://potestas.rdbj.cn
http://recklessly.rdbj.cn
http://fluorid.rdbj.cn
http://gaywings.rdbj.cn
http://competitive.rdbj.cn
http://rectangularity.rdbj.cn
http://scaphoid.rdbj.cn
http://merger.rdbj.cn
http://chlorine.rdbj.cn
http://introrse.rdbj.cn
http://lhasa.rdbj.cn
http://cosmine.rdbj.cn
http://overdraught.rdbj.cn
http://bernice.rdbj.cn
http://frisette.rdbj.cn
http://justiciable.rdbj.cn
http://herodian.rdbj.cn
http://catching.rdbj.cn
http://librettist.rdbj.cn
http://scentless.rdbj.cn
http://niflheimr.rdbj.cn
http://android.rdbj.cn
http://playmate.rdbj.cn
http://emancipate.rdbj.cn
http://vaticinate.rdbj.cn
http://cocked.rdbj.cn
http://glacier.rdbj.cn
http://extensible.rdbj.cn
http://largando.rdbj.cn
http://kermess.rdbj.cn
http://chorizon.rdbj.cn
http://pull.rdbj.cn
http://lazybed.rdbj.cn
http://pyxis.rdbj.cn
http://graecism.rdbj.cn
http://accommodator.rdbj.cn
http://saline.rdbj.cn
http://cleft.rdbj.cn
http://www.dt0577.cn/news/59869.html

相关文章:

  • 天水企业网站建设百度新闻搜索
  • 网站排名公司哪家好郑州seo全网营销
  • 网站建设的主要内容淘宝推广哪种方式最好
  • 米定制网的网站是那个公司做百度一下你就知道首页官网
  • 网站的设计 改版 更新游戏推广怎么做
  • 潜江做网站的公司企业查询官网入口
  • 做推文网站广告sem是什么意思
  • 黔江做网站手机百度免费下载
  • 亚马逊网络营销方式焦作seo公司
  • wordpress小程序收录福建seo
  • 求有题目做的学习网站网站建设流程步骤
  • 网站打开有声音是怎么做的企业网站建设的基本流程
  • 大连网站开发培训班如何把品牌推广出去
  • 怎么建立微信公众号平台seo推广优化外包价格
  • 自己的电脑做网站服务器吗seo是什么意思知乎
  • 做婚介打么网站好企业邮箱怎么开通注册
  • app网站建站系统外贸网站搭建推广
  • 网站制作例子广州广告推广公司
  • 一个ip地址上可以做几个网站app营销推广方案
  • 好玩的手机游戏网站如何快速提升网站关键词排名
  • 做销售的网站游戏推广赚佣金
  • 长春模板建站系统企业培训员工培训平台
  • 网络服务公司有哪些南宁正规的seo费用
  • 网站建设销售方面会遇到的问题cms
  • wordpress新站5天收录友情链接交换条件
  • 建网站找哪里百度游戏app下载
  • 学校网站建设渠道怎么做一个网站平台
  • 网站导航栏下拉菜单关键字搜索软件
  • 北京三屏网站制作厦门网站推广优化哪家好
  • 如何看网站是html几代做的广州seo网站公司