我正在使用六角形图块,并试图在每个图块上存储数据; localPos,worldPos,名称等,我尝试访问的内容之一是双方的直接邻居。 我从这里开始使用脚本开始:
https://medium.com/@allencoded/unity-tilemaps-and-storing-individual-tile-data-8b95d87e9f32
但是我找不到有关存储邻居的任何信息。我假设它可能与BoundsInt或cellBounds有关,但不确定并且文档目前受到限制。
我尝试做的一件事是使用世界位置创建游戏对象,并将其放置在应该放置的位置,但是我想可能会使它过于复杂。
其他人对此有好运吗?
答案 0 :(得分:1)
我在寻找获取给定图块的 6 个邻居的公式时发现了这个问题。 对于这个网格:
原来公式取决于当前节点的y坐标是偶数还是奇数。这是对我有用的代码;
static Vector3Int
LEFT = new Vector3Int(-1, 0, 0),
RIGHT = new Vector3Int(1, 0, 0),
DOWN = new Vector3Int(0, -1, 0),
DOWNLEFT = new Vector3Int(-1, -1, 0),
DOWNRIGHT = new Vector3Int(1, -1, 0),
UP = new Vector3Int(0, 1, 0),
UPLEFT = new Vector3Int(-1, 1, 0),
UPRIGHT = new Vector3Int(1, 1, 0);
static Vector3Int[] directions_when_y_is_even =
{ LEFT, RIGHT, DOWN, DOWNLEFT, UP, UPLEFT };
static Vector3Int[] directions_when_y_is_odd =
{ LEFT, RIGHT, DOWN, DOWNRIGHT, UP, UPRIGHT };
public IEnumerable<Vector3Int> Neighbors(Vector3Int node) {
Vector3Int[] directions = (node.y % 2) == 0?
directions_when_y_is_even:
directions_when_y_is_odd;
foreach (var direction in directions) {
Vector3Int neighborPos = node + direction;
yield return neighborPos;
}
}
答案 1 :(得分:0)
如果遵循上面的文章,也许使每个对象调用的另一个函数都能做到这一点。让函数将GameObjects或位置本身存储在您选择的某些数据结构内的当前“ anchor”图块中。尽管这可能比较麻烦,但可以提供更大的灵活性。
TL; DR
在GameTile中,为存储的邻居添加另一个数据结构。然后创建一个私有函数实例化邻居,或者在被跟踪的x和y位置直接创建邻居。然后将实例化的邻居存储到数据结构中。