Unity Engine的Vector3结构中可以存储哪些类型的数据?

时间:2016-04-06 21:23:18

标签: c# arrays unity3d data-structures unity3d-2dtools

我对Unity 2D有点新,所以我不熟悉 Vector3 数据结构的限制,但我想知道我是否可以存储非将非像素/图形相关数据与常规数组相协调。

一些背景信息: 我正在制作2D地下城生成器,并希望在主要Vector3数组的每个索引中存储编码整数(使用两个嵌套for循环) ,以便在生成地牢时,通过每次迭代传递可以改变整数。然后最终布局将采用编码整数并擦除索引数据,而是在该位置实例化适当的地板或墙砖。

代码如下:

  • 000 =已填写
  • 010 =走廊
  • 020 =门
  • 030 =房间
  • 100 =受保护
  • 001 - 区域1 [主要]
  • 002 - 地区2
  • 003 - 区域3,

因此,32是区域2中类型房间的网格块。当走廊连接到它时,它变为12.当两个区域从走廊连接时,它采用两个区域中较低的一个,依此类推,直到整个网格填充1(连接到主区域),此时它们都转换为0表示地牢已准备好转换为纹理。 A 100是在x> 1时触发的特殊标志。 99表示一个街区应该保持填满,否则意外加入房间或扩大门口。

1 个答案:

答案 0 :(得分:1)

Vector3只有3个浮点数组合在一起,标记为x,y和z。当你可以做任何你想做的事情时,我建议反对使用它来实现这个目的。你想要的是一个自定义结构,它不包含三个整数,而是一个枚举值,一个int和一个bool。像这样:

/// <summary>
/// A simple struct to represent a tile on the map
/// </summary>
public struct MapTile {
    /// <summary>
    /// The type of the tile
    /// </summary>
    public TileType Type;

    /// <summary>
    /// The region this tile is in
    /// </summary>
    public int Region;

    /// <summary>
    /// True if this tile is protected
    /// </summary>
    public bool Protected;

    /// <summary>
    /// Constructs a new MapTile
    /// </summary>
    /// <param name="type">The type of the tile</param>
    /// <param name="region">The region the tile is in</param>
    /// <param name="isProtected">true if the tile is protected</param>
    public MapTile(TileType type, int region, bool isProtected) {
        this.Type = type;
        this.Region = region;
        this.Protected = isProtected;
    }
}

/// <summary>
/// An enum that contains the types of possible tiles
/// </summary>
public enum TileType {
    FILLED, CORRIDOR, DOOR, ROOM
}

最好在需要时制作自定义结构或类,而不是试图将数据刷入现有结构中。 此外,尝试在float(十进制)中存储整数值(-1,2,7,...)通常是一个坏主意,因为浮点数易受舍入误差的影响。您可能希望您的值为25,但计算机可能会使其为25.00000000001或24.9999999999,这使得它很难使用。

避免“魔术数字”也是一种好习惯,例如你计划如何将“走廊”存储为“010”。如果有人看到你的代码,他们怎么会知道010意味着走廊?如果您想稍后更改怎么办?幸运的是C#(以及大多数其他语言)都有一个内置类型的“代表一个东西的数字”,它被称为枚举。枚举类似于整数,但它们只具有您给出的特定值,并且标记得很好。

我希望这有帮助!

相关问题