/// <summary> /// 육각 타일에 맞춘 각도 벡터를 반환합니다. (-150, -120, -60, 0, 60, 120, 180도) transform.right에 대입 /// </summary> public static Vector2 SnapAngle(Vector2 dir, out EDirec eDirec) { float angle = Vector2.SignedAngle(Vector2.right, dir); angle = angle >= 150 ? 180 : angle >= 90 ? 120 : angle >= 30 ? 60 : angle >= -30 ? 0 : angle >= -90 ? -60 : angle >= -150 ? -120 : 180; eDirec = angle == 0 ? EDirec.LEFT : angle == 60 ? EDirec.LEFTDOWN : angle == 120 ? EDirec.RIGHTDOWN : angle == 180 ? EDirec.RIGHT : angle == -120 ? EDirec.RIGHTUP : EDirec.LEFTUP; Vector2 res = (Quaternion.Euler(0, 0, angle) * Vector2.right); return(res); }
/// <summary> /// Hex를 주어진 방향으로 한 칸 이동시킵니다. /// </summary> public void Move(EDirec eDirec) { switch (eDirec) { case Hex.EDirec.RIGHT: x++; break; case Hex.EDirec.RIGHTUP: y++; if (y % 2 == 0) { x++; } break; case Hex.EDirec.LEFTUP: y++; if (y % 2 != 0) { x--; } break; case Hex.EDirec.LEFT: x--; break; case Hex.EDirec.LEFTDOWN: y--; if (y % 2 != 0) { x--; } break; case Hex.EDirec.RIGHTDOWN: y--; if (y % 2 == 0) { x++; } break; } }