안녕하세요, 브금입니다.
오늘은 투사체 피격 판정 스크립트를 어떻게 만드는지 강좌글을 올려보려 합니다.
이 투사체 피격 판정은 머리 / 몸통 / 다리 / 발 의 네 부위를 인식할 수 있으며,
여기서 인식하능한 투사체란 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}%" #맞은 부위 출력
눈꽃님
2020.07.09저런 글도 있는 데 난 못만드는 게 현실
DDang_
2021.07.14이런 좋은 글은 추천 입니다