GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2]3D에서의 목표물 거리와 방향측정

타락카얀 2023. 7. 12. 14:25
728x90

 

 

GAME MAKER 강좌

 

KAYAN

 

 

 

 

 

◈ 3D에서의 목표물 거리와 방향측정

 

 

아래 함수는 3D상의 (x1,y1,z1)에서 (x2,y2,z2)까지의 거리를 측정하여 값을 반환합니다.

 

   ◎ point_distance_3d(x1,y1,z1,x2,y2,z2)

 

(▲ 거리 측정)

 


   var inst, ex, ey, ez;
   inst = instance_nearest(x, y, enemy);
   if !(inst==noone)
   {
       ex = inst.x;
       ey = inst.y;
       ez = inst.z;
       if point_distance_3d(x, y, z, ex, ey, ez) < 200
       {
           instance_create_layer(x, y, "Bullets", obj_Missile)
       }
   }


 

예시는 가장 가까운 obj_enemy의 3D 좌표와의 거리가 200 미만일 때, obj_Missile 오브젝트를 Bullets 레이어에 생성합니다.

 

 

 

 

3D 상의 방향 측정은 함수가 따로 없지만, 아래와 같이하면 방향값을 얻을 수 있습니다.

 


   var dist, dir;
   dist = point_distance(x1,y1,x2,y2); //2D 평면상의 거리측정
   
   dir=point_direction(0,-z1,dist,-z2); //z축의 방향 측정
   
   if dir>180{dir=dir-360;} //270~360 각도는 처리하기 편하도록 0~-90으로 재처리

 

이것은 첫번째로 point_distance 함수를 사용하여 2D 평면상의 현재지점(x1,y1)과 목표물(x2,y2)와의 거리를 측정합니다.

 

(▲ 2D 평면상의 거리 측정)

 

다음, z값에 대한 각도를 얻기위해, 측정한 거리값을 2D 평면상으로 응용(point_direction)해서 x축에 대입합니다.

그리고 현재지점의 z좌표와 목표물의 z좌표를 각각 y축에 대입하여 각도를 측정하면 방향값을 얻을 수 있습니다.

 

※ 보통 3D상의 z좌표는 위쪽이 + 값이지만, 2D 좌표의 y축 위쪽은 - 값이기 때문에 z좌표를 반대로 적용합니다.

 

(▲ z축으로 방향 측정)

 

값을 측정하면 +z는 0~90, -z는 270~360 이 나오는데, 270~360은 처리하기 편하도록 0~-90으로 재처리하는것이 좋습니다.

 

 

 

 

 

 

 

300x250