比较坐标/方向对象

时间:2018-01-24 08:13:43

标签: c# unity3d

我有一个网格并获得移动方向。这个方向可以是

  Vector2Int movementDirection = new Vector2Int(/* this can be
     (0,1) // up
     (0,-1) // down
     (-1,0) // left
     (1,0) // right
  */);

Vector2Int是Unity Framework的一个类! https://docs.unity3d.com/ScriptReference/Vector2Int.html

当从下到上移动时,我想检查targetCell周围的所有单元格。但我不想检查底部细胞,因为这个细胞是我来自的地方。

当我从左向右移动时,我不想检查左侧单元格。

所以我去了这个

private void CheckCells(Vector2Int movementDirection)
    {
        Vector2Int[] cellDirections = { Vector2Int.up, Vector2Int.down, Vector2Int.left, Vector2Int.right };
        cellDirections.Where(direction => !direction.Equals(movementDirection)).ToArray();

        for (int i = 0; i < cellDirections.Length; i++)
        {
            // check the other 3 cells
        }
    }

此数组的长度仍为 4 。我似乎无法将Vector2Int.up(0,1)

进行比较

我试过

!direction.Equals(movementDirection)

directon != movementDirection

如何为4个方向中的3个开始循环?给定的参数应该从数组中删除第四个方向。

也许我不需要阵列?

1 个答案:

答案 0 :(得分:3)

这一行:

cellDirections.Where(direction => !direction.Equals(movementDirection)).ToArray();

对您的cellDirections变量不执行任何操作,因为您没有分配结果。

尝试:

cellDirections = cellDirections
                 .Where(direction => !direction.Equals(movementDirection)).ToArray();

或任何其他任务:

var anyVar = cellDirections
             .Where(direction => !direction.Equals(movementDirection)).ToArray();

请注意,您也可以循环浏览cellDirections并在if内添加for

foreach (var direction in cellDirections)
{
    if(!direction.Equals(movementDirection))
    {
        // check the cells
    }
}