C# 团结一致地从Tilemap中获得邻居

C# 团结一致地从Tilemap中获得邻居,c#,unity3d,C#,Unity3d,我正在使用六边形瓷砖贴图,并试图在每个瓷砖上存储数据;localPos、worldPos、name等,我试图访问的内容之一是双方的近邻。 我已经开始使用这里的脚本开始: 但我找不到任何有关存储邻居的信息。我假设它可能与BoundsInt或cellBounds有关,但我不确定,而且文档目前是有限的 我试着做的一件事是使用世界位置创建游戏对象,这将它们放置在它们应该位于的位置,但我认为我可能过于复杂了 还有其他人有幸做到这一点吗?如果遵循上面的文章,也许每个对象调用的另一个函数也能做到这一点。让函

我正在使用六边形瓷砖贴图,并试图在每个瓷砖上存储数据;localPos、worldPos、name等,我试图访问的内容之一是双方的近邻。 我已经开始使用这里的脚本开始:

但我找不到任何有关存储邻居的信息。我假设它可能与BoundsInt或cellBounds有关,但我不确定,而且文档目前是有限的

我试着做的一件事是使用世界位置创建游戏对象,这将它们放置在它们应该位于的位置,但我认为我可能过于复杂了


还有其他人有幸做到这一点吗?

如果遵循上面的文章,也许每个对象调用的另一个函数也能做到这一点。让函数将游戏对象或位置本身存储在当前“锚定”磁贴中,并存储在您选择的某些数据结构中。虽然这可能更麻烦,但它将允许更大的灵活性

TL;DR

为存储的邻居添加另一个数据结构。然后创建一个私有函数来实例化邻居,或者直接在跟踪的x和y位置创建邻居。然后将实例化的邻居存储到数据结构中。

我在寻找一个公式以获得给定分幅的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;
    }
}
静态向量3int
左=新矢量3int(-1,0,0),
右=新矢量3int(1,0,0),
向下=新矢量3int(0,-1,0),
向下左=新矢量3int(-1,-1,0),
向下=新矢量3int(1,-1,0),
向上=新矢量3int(0,1,0),
UPLEFT=新矢量3int(-1,1,0),
直立=新向量3int(1,1,0);
静态向量3int[]方向\u当\u y\u为\u偶数=
{左、右、下、下、左、上、左};
静态向量3int[]方向当为奇数=
{左、右、下、下、右、上、正};
公共IEnumerable邻居(向量3int节点){
Vector3Int[]方向=(node.y%2)==0?
方向\u当\u y\u为偶数时:
当你是奇数时的方向;
foreach(方向中的var方向){
向量3int neightrpos=节点+方向;
收益率;
}
}

一开始非常混乱,但有道理。谢谢你!