Unity

드레그한 방향 알아내기

Naku 2013. 1. 15. 20:58

두 백터(Vector3) 사이에 임계치(threshold)를 넘어간 거리를 이동한 경우 방향(8방향 기준)을 알아내는 함수가 필요해서 제작해봄.


private enum DIRECTION {LEFT_DOWN = 1, DOWN, RIGHT_DOWN, LEFT, CENTER, RIGHT, LEFT_UP, UP, RIGHT_UP};


DIRECTION GetDirection8Way(Vector3 begin, Vector3 end, int threshold) {

double length = System.Math.Sqrt(System.Math.Pow(end.x - begin.x, 2) + System.Math.Pow(end.y - begin.y, 2));

if (length < threshold) return DIRECTION.CENTER;

double arc = System.Math.Round(System.Math.Atan2(end.y - begin.y, end.x - begin.x) * 180 / System.Math.PI);

if (arc < 0) arc = arc + 360;

if (((0 <= arc) && (22 > arc)) || ((337 <= arc) && (360 > arc))) {

return DIRECTION.RIGHT;

}  else if ((22 <= arc) && (67 > arc)) {

return DIRECTION.RIGHT_UP;

}  else if ((67 <= arc) && (112 > arc)) {

return DIRECTION.UP;

}  else if ((112 <= arc) && (157 > arc)) {

return DIRECTION.LEFT_UP;

}  else if ((157 <= arc) && (202 > arc)) {

return DIRECTION.LEFT;

}  else if ((202 <= arc) && (247 > arc)) {

return DIRECTION.LEFT_DOWN;

}  else if ((247 <= arc) && (292 > arc)) {

return DIRECTION.DOWN;

}  else if ((292 <= arc) && (337 > arc)) {

return DIRECTION.RIGHT_DOWN;

}  else {

return DIRECTION.CENTER;

}

}