我对Unity 2D有点新,所以我不熟悉 Vector3 数据结构的限制,但我想知道我是否可以存储非将和非像素/图形相关数据与常规数组相协调。
一些背景信息: 我正在制作2D地下城生成器,并希望在主要Vector3数组的每个索引中存储编码整数(使用两个嵌套for循环) ,以便在生成地牢时,通过每次迭代传递可以改变整数。然后最终布局将采用编码整数并擦除索引数据,而是在该位置实例化适当的地板或墙砖。
代码如下:
等
因此,32是区域2中类型房间的网格块。当走廊连接到它时,它变为12.当两个区域从走廊连接时,它采用两个区域中较低的一个,依此类推,直到整个网格填充1(连接到主区域),此时它们都转换为0表示地牢已准备好转换为纹理。 A 100是在x> 1时触发的特殊标志。 99表示一个街区应该保持填满,否则意外加入房间或扩大门口。
答案 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#(以及大多数其他语言)都有一个内置类型的“代表一个东西的数字”,它被称为枚举。枚举类似于整数,但它们只具有您给出的特定值,并且标记得很好。
我希望这有帮助!