void PlaceArrow(HexDirection direction, HexCell cell)
    {
        HexCell neighbor = cell.GetNeighbor(direction);

        if (neighbor == null || neighbor.IsUnderwater)
        {
            return;
        }
        EdgeVertices e = new EdgeVertices(
            neighbor.Position + HexMetrics.GetFirstArrowCorner(direction.Opposite()),
            neighbor.Position + HexMetrics.GetSecondArrowCorner(direction.Opposite()));

        Vector3 center = new Vector3(e.v3.x, e.v3.z, -e.v3.y - 0.1f);

        Toggle instance = Instantiate(arrowPrefab);

        instance.onValueChanged.AddListener(delegate { migrationMenu.Open(neighbor, cell); });

        instance.transform.localPosition = HexMetrics.PerturbPerspective(center);
        instance.transform.localRotation = Quaternion.Euler(0f, 0f, 60f - 60f * (float)direction);
        instance.transform.SetParent(arrowContainer, false);
    }