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
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 문자열 (1) | 2023.12.30 |
---|---|
[게임메이커 강좌-기초][GMS2] 삼항연산자(? :) (1) | 2023.12.30 |
[게임메이커 강좌-기초][GMS2]목표물 방향과 거리측정 (0) | 2023.07.12 |
[게임메이커 강좌-기초][GMS2]게임 재시작 및 종료하기 (1) | 2023.07.11 |
[게임메이커 강좌-기초][GMS2]게임에서 룸 이동 (0) | 2023.07.11 |
댓글