개인 자료란 (JE)

  서버 커뮤니티

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

스크립트 기초

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

2020.07.07 조회 수 899 추천 수 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/115/774/003/262x150.crop.jpg?20240424234825

업데이트

마인크래프트 1.20.5 정식 업데이트

학교가기싫다

2024-04-24

0

/files/thumbnails/762/770/003/262x150.crop.jpg?20240418073724

레드스톤

T.B.H (고민중독) | 노트블럭 버전 | NoteBlock Cover [한국어 영어 중국어 가사 추가]

노트블럭전문가

2024-04-18

0

/files/thumbnails/218/767/003/262x150.crop.jpg?20240412130213

레드스톤

우리의 꿈 - 원피스 오프닝

노트블럭전문가

2024-04-12

0

/files/thumbnails/505/766/003/262x150.crop.jpg?20240411122306

레드스톤

기동전사 건담 수성의 마녀 | 노트블럭 커버 1

노트블럭전문가

2024-04-11

1

/files/thumbnails/932/765/003/262x150.crop.jpg?20240410124459

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

노트블럭전문가

2024-04-10

0