【问题标题】:create grid by reading from external file in Unity通过在 Unity 中读取外部文件来创建网格
【发布时间】:2018-01-24 14:40:16
【问题描述】:

在创建网格时,我通常会选择

private Cell[,] mapCells = new Cell[10, 10];

for (int x = 0; x < mapSizeHorizontal; x++)
{
    for (int y = 0; y < mapSizeVertical; y++)
    {
            mapCells[x, y] = new Cell();
    }
}

但我想从外部文本文件中读取地图信息。单元格本身有这个构造函数

public Cell(Celltype type = null, Enemy enemy = null)

我想创建一个文本文件语法来阅读它。

  • [] 表示新行
  • () 表示一行中的一个单元格

这是一个示例行

[(火)(霜,妖精)()]

  • 第一个单元格是火类型的单元格。这个牢房没有敌人 就可以了。
  • 第二个单元格将是霜冻类型的单元格。这个牢房有一个妖精 就可以了。
  • 第三个牢房没有类型也没有敌人。

Unity 文档提供了TextAsset

https://docs.unity3d.com/Manual/class-TextAsset.html

我试过用这种方式读取文件

private void ReadFile(string fileToRead)
{
    TextAsset txt = Resources.Load("Maps/" + fileToRead) as TextAsset;
    string content = txt.text;
}

但这只是返回给我完整的纯文本。我想用四个不同的行

创建这个示例地图

[(forest, dragon)()] -> 两个单元格,第一个是元素和敌人,第二个是空的

[(frost, dragon)()()(frost, Yeti)] -> 四个单元格,2 和 3 是空的

[(death, Giant)(fire, goblin)] -> 两个单元格,元素和敌人

[()()()()()()] -> 六个空单元格

创建地图时如何将文本信息输入到我的代码中?也许外部文件有更好的语法?

【问题讨论】:

  • 您应该解析结果字符串 (content)。请注意,创建自己的格式可能不是一个好主意,因为您必须自己编写解析器。考虑使用已经存在的标记语言,例如 XML(只是一个示例,不一定是最适合您的用例的语言)。
  • 你对我有什么建议吗?我想过 JSON 但我不知道
  • 我会把它作为答案发布。

标签: c# unity3d


【解决方案1】:

您应该解析结果字符串 (content)。请注意,创建自己的格式可能不是一个好主意,因为您必须自己编写解析器。考虑使用现有的标记语言,例如 XML 或 JSON。

这是您的示例在 JSON 中的样子:

{
    "level": [
        {"row": [{"type": "forest", "monster": "dragon"}, {}]},
        {"row": [{"type": "forest", "monster": "dragon"}, {}, {}, {"type": "frost", "monster": "yeti"}]},
        {"row": [{"type": "death", "monster": "giant"}, {"type": "fire", "monster": "goblin"}]},
        {"row": [{}, {}, {}, {}, {}, {}]}
    ]
 } 

如果此 JSON 存储在字符串中,则可以使用例如 Json.NET 库从该字符串创建对象。

我个人会使用 JSON,但如果您不想使用第三方库,请知道 .NET API 已经存在与 XML 相关的类。

【讨论】:

    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多