
因此,无论考虑什么游戏,您都在考虑创建一个游戏,您肯定会碰到的一件事是如何访问所有角色级别的进度信息。 您可能会考虑将所有内容都放到本地存储中,仅此而已,但是最后,以有组织的方式放置信息可以帮助您简化游戏平衡。
假设我们正在创建一个角色扮演游戏,并且想要设置主要角色级别,我们可以创建一个.xls并组织所有内容,如下所示:
- Uma lista de jogos de 2018
- 危险驾驶,疲倦
- 第3部分:使用虚幻引擎构建“我们的后裔”(游戏)
- 如何在人群中脱颖而出
- Alphacast采访《守望先锋》首席角色艺术家Renaud Galand的笔录和英文翻译
等级HP BaseAttack 1100 10 2 200 15
使用xls文件是编辑角色属性的简单方法,除了可以广泛了解游戏各个级别的属性外,还可以在单独的文件中制作此版本,从而使您可以与其他团队成员共享同一文件,例如作为游戏设计和关卡设计。
现在逐步介绍如何创建数据管理器。 必须有几种不同的解决方案,我在这里介绍的只是其中一种。 在继续之前,数据管理器只不过是用于管理游戏中重要数据的脚本,在此示例中,我们将使用它来管理主要角色级别的属性。
- 将.xls文件转换为JSON
编辑字符级进程后,您可以使用任何库将其转换为JSON,我使用了一个称为NPOI的库。 在Unity编辑器中,我们还必须解析JSON文件,为此,我使用了另一个名为SimpleJSON的库。
转换后,您的JSON文件应如下所示:
[ { “1级, “ maxHP”:100, “ baseAttack”:10 }, { “级别”:2, “ maxHP”:200, “ baseAttack”:15 } ]
我将此文件称为PlayerLevelData,并将其放在名为Resources / LevelData / PlayerLevelData的文件夹中。
2.创建一个关卡数据对象
下一步是创建一个具有角色属性的类:
使用System.Collections.Generic; [System.Serializable] 公共类PlayerLevelData { [System.Serializable] 公共类属性 { 公共诠释级别; public int maxHP; 公共浮动基地攻击; } }
3.创建一个DataManager
现在,我们实际上可以创建DataManager ,在这种情况下,它将是一个单例(每个人都将访问同一实例)。 我们应该在此处创建的两个重要事项是DataManager的两个属性。 一个将具有从资源中检索的JSON值 ,另一个将具有已解析的对象 。
公共TextAsset playerLevelDataJson; // JSON public PlayerLevelData.Attribute [] playerLevelData; //解析的数据
如前所述,我将使用SimpleJSON库简化解析器,您可以在这里找到它:
facebook-csharp-sdk / simple-json
simple-json –用于.NET 2.0 + / SL4 + / WP7 / WindowsStore的JSON库,可选支持dynamic和DataContract
github.com
您唯一要做的是下载SimpleJSON脚本,并将其放入游戏目录内的文件夹中,我通常将其放入名为Scripts / SimpleJSON的文件夹中。 完整的DataManager脚本如下所示:
使用UnityEngine; 使用System.Collections; 使用UnityEngine.SceneManagement; 公共类DataManager:MonoBehaviour { 私有静态DataManager _Instance; 公共静态DataManager实例{get {return _Instance; }} 公共TextAsset PlayerLevelDataJson; public PlayerLevelData.Attribute [] PlayerLevelData; 无效Awake() { 如果(_Instance == null) { _Instance = this; PlayerLevelDataJson =(TextAsset)Resources.Load(“ LevelData / PlayerLevelData”); ParseData(); DontDestroyOnLoad(gameObject); } } 无效的ParseData() { PlayerLevelData = SimpleJson.SimpleJson.DeserializeObject (PlayerLevelDataJson.text); Debug.Log(“ JSON Level:” + PlayerLevelDataJson.text); } public PlayerLevelData.Attribute GetPlayerCurrentLevelData(int levelIndex) { 返回PlayerLevelData [levelIndex]; } }
现在,您可以创建一个空的游戏对象并添加此脚本(我称为DataManager),请注意,这些属性是公共的,这样它们将在运行时显示在编辑器中,但是您不必一次将任何内容拖到它们上您运行游戏后,将意识到ParseData将自动填充它们。

现在,您将如何使用它,这取决于创建一个名为PlayerData的脚本,该脚本将具有我们在此处创建的PlayerLevelData引用。 然后,将使用您作为参数在DataManager的GetCurrentLevelData中传递的级别来加载PlayerLevelData,在此处可以看到,每次玩家升级时,当前级别的信息都会在编辑器中显示:

PlayerData脚本的示例:
使用UnityEngine; 使用System.Collections; 公共类PlayerData:MonoBehaviour { public PlayerLevelData.Attribute LevelData; private int _LevelIndex = 0; 公共int MaxHP; 公共浮动BaseAttack; 无效Awake() { LevelData = DataManager.Instance.GetPlayerCurrentLevelData(_LevelIndex); Debug.Log(“ Player Level” + LevelData.level); Debug.Log(“ HP:” + LevelData.maxHP); Debug.Log(“ BaseAttack:” + LevelData.baseAttack); Debug.Log(“呼叫级别提高”); 升级(); Debug.Log(“ Player Level” + LevelData.level); Debug.Log(“ HP:” + LevelData.maxHP); Debug.Log(“ BaseAttack:” + LevelData.baseAttack); } 无效的LevelUp() { _LevelIndex = 1; LevelData = DataManager.Instance.GetPlayerCurrentLevelData(_LevelIndex); } }
在此示例中,角色从第一级开始,当我们调用LevelUp函数时,将使用新属性更新该级。

看到现在我们可以简单快速地访问角色级别的任何信息。 我们可以创建各种功能,例如将属性信息带到下一个级别的LevelUp,或者创建更多属性(例如将XP的数量提高到某个级别)。
就是这样,如果某些信息不清楚,您可以在下面的github中下载示例。
erasmosoares / UnityDataManager
UnityDataManager –适用于Unity3D的DataManger
github.com
再见!