개인 자료란 (JE)

  서버 커뮤니티

Profile 브금소리BGMSound 대표칭호 없음
Profile

스크립트 기초

[ 스크립트 기본강좌 ( 12 ) ] 투사체 피격 판정

2020.07.07 조회 수 905 추천 수 2

안녕하세요, 브금입니다.

오늘은 투사체 피격 판정 스크립트를 어떻게 만드는지 강좌글을 올려보려 합니다.

투사체 피격 판정머리 / 몸통 / 다리 / 발 의 네 부위를 인식할 수 있으며,

여기서 인식하능한 투사체란 1.12.2 기준 투척했을 때 넉백을 받는 눈덩이, 달걀, 화살 을 의미합니다. (더 있을지도!)


전제 조건:

y좌표가 1.5 이상인 곳에서 정상적으로 작동합니다.

키가 2미터인 엔티티나 플레이어를 대상으로만 적용됩니다.

(응용 시 골렘과 같은 커다란 몹에도 적용할 수 있습니다)


원리

우선, 원리부터 설명드리겠습니다.

투사체의 y좌표를 a, 피격자의 y좌표를 b라고 한다면,

두 y 좌표 값의 차, 즉 a-b 가 일정 값 이상일 때 헤드샷을 출력하도록 하는 것 입니다.


이유는 플레이어의 y 좌표, 즉 b값에 있는데, 이 b값은 플레이어의 상체의 y좌표가 아닌 하체의 y좌표 값을 담고 있습니다.

따라서 투사체를 맞은 위치가 피격자의 머리에 가까워질수록 해당 투사체의 y좌표, 즉 a값의 크기가 커지는 것이고, 이에 따라 두 좌표의 차는 더 커지는 것 입니다.

반대로 발쪽을 인식하려면 투사체를 맞은 위치가 발쪽에 가까워질수록 a값의 크기가 작아지기 때문에, a-b의 값이 더 작아지는 것입니다.


이 값을을 조절하여 여러 부위로 히트박스를 나눌 수 있게 되는 것 입니다.


구문 (+주석)

저는 몸통, 머리, 발 부위만 인식하는 구문을 만들어 보았습니다.


on damage: #데미지를 입었을 때

    set {_a} to y coordinate of projectile # {_a} 값을 투사체의 y좌표로 설정

    set {_b} to y coordinate of victim  # {_b} 값을 투사체의 y좌표로 설정

    set {_n} to "몸통"  # 기본 출력값을 몸통으로 설정

    if {_a}-{_b} is bigger than 1.5: # {_a}-{_b}가 1.5보다 크다면

        set {_n} to "머리" # 출력값을 머리로 설정

    if {_a}-{_b} is smaller than 0.6: # {_a}-{_b}가 0.6보다 작다면

        set {_n} to "발"  # 출력값을 발로 설정

    send "%{_n}%" #맞은 부위 출력


2개의 댓글

눈꽃님
2020.07.09

저런 글도 있는 데 난 못만드는 게 현실

DDang_
2021.07.14

이런 좋은 글은 추천 입니다

뉴스 및 창작물
/files/thumbnails/268/789/003/262x150.crop.jpg?20240515192032

레드스톤

벌레먹은 돌 빠르게 제거하는 법

GlassesFilm

2024-05-15

0

/files/thumbnails/797/788/003/262x150.crop.jpg?20240515090924

건축

마인크래프트로 구현한 카르카손 보드게임

Warak

2024-05-15

1

/files/thumbnails/487/784/003/262x150.crop.jpg?20240508233607

모드

Windows Borderless 모드에서 악성코드 발견

학교가기싫다

2024-05-08

1

/files/thumbnails/384/778/003/262x150.crop.jpg?20240512002324

업데이트

마인크래프트 자바 에디션 스냅샷 24w18a

학교가기싫다

2024-05-06

0

/files/thumbnails/855/781/003/262x150.crop.jpg?20240505141129

레드스톤

레이저 클리너

GlassesFilm

2024-05-05

1