Collider2D hit = Physics2D.OverlapBox(transform.position - new Vector3(0, 7.5f, 0), new Vector2(13, 4), 0, LayerMask.GetMask("Player"));
다음과 같이 OverlapBox를 사용할 수 있다. 이 범위를 확인하려면 OnDrawGizmos()함수를 사용해야되는데
void OnDrawGizmos() {
Gizmos.color = Color.red;
Gizmos.DrawWireCube(transform.position - new Vector3(0,7.5f,0), new Vector2(13,4));
}
나는 다음과 같이 색상을 red로 하고 범위를 확인해 보기로 하였다.

위쪽 빨간선이 이상하게 잘려서 나오는데 실제 유니티에선 박스형태로 잘나오게 된다. 여하튼 저정도 범위안에 들어오면 애니메이션을 실행시키는 코드를 작성하였다.
if(hit != null) {
anim.SetBool("Hammer", true);
}
else {
anim.SetBool("Smash", true);
smash.gameObject.SetActive(true);
}
hit이 null이 아니라면 범위안에 player가 들어와있는 것이므로 근거리 공격인 Hammer animation을, 그게 아니라면 원거리 공격인 smash 애니메이션을 실행시킨다.
근거리 공격인 Hammer실행되면

다음과 같은 애니메이션이 실행되는데 이 애니메이션을 담고있는 object 안의 script를 통해 event로 함수를 실행시킬수 있다. 이 애니메이션 중 저 빨간색 범위안에 있으면 넉백을 시킬 것이다. 함수는 다음과 같다.
public class Hammer : MonoBehaviour
{
public Boss boss;
void Awake() {
boss = GetComponentInParent<Boss>();
}
public void AnimOff() {
transform.GetChild(0).gameObject.SetActive(false);
boss.anim.SetBool("Hamming", false);
gameObject.SetActive(false);
}
public void EarthQuakeOn() {
transform.GetChild(0).gameObject.SetActive(true);
Collider2D hit = Physics2D.OverlapBox(boss.transform.position - new Vector3(0, 7.5f, 0), new Vector2(13, 4), 0, LayerMask.GetMask("Player"));
if(hit != null) {
hit.GetComponent<Player>().rigid.AddForce(new Vector2(0, -60), ForceMode2D.Impulse);
Debug.Log("hi");
}
}
}
여기서 EarthQuakeOn이라는 함수에서 OverlapBox를 사용하여 범위안에 player layer가 있으면 AddForce를 통해 넉백을 가하였다. 주의할 점은 기준이 boss.transform.position인데
Collider2D hit = Physics2D.OverlapBox(transform.position - new Vector3(0, 7.5f, 0), new Vector2(13, 4), 0, LayerMask.GetMask("Player"));
이 코드를 그대로 복사해왔다가 저 박스안 쪽이 아니라 플레이어가 이상한 곳에 있어도 넉백이 일어났었다. 기준점은 항상 잘 확인하여야 한다. 여하튼 이렇게 OverlapBox를 실제로 프로젝트에 활용해 보았다.