有两种方法可以开始使用Game Data Edito来管理您的数据。您可以在手动输入数据或从spreadsheet导入。首先,我讲下手动编辑您的数据。

1. 输入您的游戏数据

用 GDE Editor:

  • 首先,通过指定的数据类型与定义数据编辑器窗口中创建一个模式

  • 二,创建与创建数据编辑器窗口中的数据项

从Spreadsheet导入您的游戏数据:

2. 生成你的 Data Classes

要生成所有 GDE Data Classes 和 Extension Methods,使用Generate Custom Extensions菜单操作。

3. 包括 GameDataEditor namespace

包括GameDataEditor namespace在任何您将访问GDE的源文件的顶部

using GameDataEdtor;

4. 初始化 GDE

有3种方法来初始化GDE。从捆绑资源,从字符串,或来自一个TextAsset。

从 Resources:

您可以通过确保文件路径是包含在您的应用程序的资源数据文件 /Resources路径。例如:"Assets/GameDataEditor/Resources/gde_data.txt". 初始化GDE,只要从Resources使用的文件名没有文件扩展名

GDEDataManager.Init("gde_data");

如果您有GDE加密数据,”_enc”添加到你的文件名的末尾,并通过 “真” 的第二个参数.

GDEDataManager.Init("gde_data_enc", true);


从网址:

要初始化GDE与从服务器下载数据,首先下载该文件,然后将该文件内容传递给GDE。

IEnumerator InitGDE () {
  WWW payload = new WWW("http://example.com/gde_data.txt");
  yield return payload;

  if (!GDEDataManager.InitFromText(payload.text)) {
    Debug.LogError("Error initializing!");
  }
}

如果你的数据是加密GDE 先解密你的数据:

IEnumerator InitGDE () {
  WWW payload = new WWW("http://example.com/gde_data_enc.bytes");
  yield return payload;
  
  string data = GDEDataManager.DecryptGDEData(payload.bytes);
  if (!GDEDataManager.InitFromText(data)) {
    Debug.LogError("Error initializing!");
  }
}


从TextAsset:

在下载内容的情况下,可以从这样的TextAsset加载GDE数据:

//Adapted from Unity3D AssetBundle Docs
void Start () {
  var payload = WWW ("http://example.com/myBundle.unity3d");
  yield payload;

  TextAsset gde_data = (TextAsset)payload.assetBundle.Load("gde_data", typeof(TextAsset));

  if (!GDEDataManager.Init(gde_data)) {
    Debug.LogError("Error initializing!");
  }
}

如果您有GDE加密数据,调用init方法是这样的:

GDEDataManager.Init(gde_data, true);

5. 读取数据

读你的数据,你使用产生的GDE数据类。如果你的项目是这样定义的:

这样读取:

// Make sure GDE is initialized BEFORE reading any item data
void LoadTunic() {
  GDEArmorData tunic;

  if (!GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Armor_LeatherTunic, out tunic))
    Debug.LogError("Error reading tunic data!");

  //Do something with tunic data
  int totalHP = tunic.hit_points_delta + 100;
}

6. 修改和保存数据

要在运行时修改数据,使用你产生GDE数据类. 我会用这个Warrior项目来演示如何修改它的数据

修改基本类型: Electronics基本类型自动保存。

void ModifyIDList() {
    GDECharacterData warrior;
    
  if (!GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Character_Warrior, out warrior))
    Debug.LogError("Error reading character data!");

  //任何更改基本字段类型都会自动保存  warrior.hp += 100;
  warrior.name = "Celestipoo";
}

修改列表类型: 列表类型保存调用设置方法。

void ModifyTunic() {
  GDECharacterData warrior;

  if (!GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Character_Warrior, out warrior))
    Debug.LogError("Error reading character data!");

  //修改列表中的任何你喜欢的方式。
  //添加,删除或更改项
  //然后调用生成的Set方法 
  warrior.inventory_ids[0] = 314;
  warrior.inventory_ids.Add(1124);
  warrior.inventory_ids.RemoveAt(4);

  //确保调用Set!!
  warrior.Set_inventory_ids();
}

从上面的修改战士项目将永远载入修改后的值,直到它被重置。 您可以重置所有领域的某个项目或者复位特定字段

void ResetWarrior() {
  GDECharacterData warrior;
  
  if (!GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Character_Warrior, out warrior))
    Debug.LogError("Error reading warrior data!");
    
  //重置inventory_ids领域
  warrior.Reset_inventory_ids();
  
  //重置所有领域
  warrior.ResetAll();
}

7. 加密您的数据(可选)

如果您想您的数据进行加密,所以建议这样做的,或者近,你的开发周期结束。请记住,你会 需要你的数据所做的任何更改后使用GDE编辑加密或当您从电子表格中导入数据。 对数据进行加密,进入加密数据菜单操作:

加密完成后,你会看到一个确认对话框。你可以单击路径的对话框中找到您的项目中的那些文件。您现在的数据是加密的!要加载加密的数据看 GDE初始化节.

8享受设计你的游戏!

就是这样!如果你有问题,你可以在论坛发布一条消息上的 或者给我发邮件.

这里是我的GDE测试类的缩短版,以显示你是什么样子都放在一起。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

using GameDataEditor;

public class TwoDListTest : MonoBehaviour {
  GDEMainData data;

  //使用此初始化
  void Start () {
    if (!GDEDataManager.Init("test2d"))
      Debug.LogError("Error initializing!");
    else
    {
      if(!GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Main_DevItem, out data))
        Debug.LogError("Something went wrong :(");

      // 现在我的数据已被加载并准备使用
      //在我的测试场景,以下我在OnGUI使用它()
    }
  }

  void OnGUI() {
    float x = 0f;
    float y = 0f;
    float lineHeight = 20f;
    Vector2 size;

    GUIContent content = new GUIContent("2D List Test");
    size = GUI.skin.label.CalcSize(content);
    GUI.Label(new Rect(x, y, size.x, lineHeight), content);
    y += lineHeight;

    content.text = "Bool: ";
    data.b.ForEach(
           l => l.ForEach(
                     itr => {content.text += itr+" | ";}
    ));

    size = GUI.skin.label.CalcSize(content);
    GUI.Label(new Rect(x, y, size.x, lineHeight), content);
    y += lineHeight;

    //它继续进行
  }
}