[Unity] OverlapBox적용하기

조팽이·2024년 3월 18일

Unity

목록 보기
1/13
post-thumbnail
 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를 실제로 프로젝트에 활용해 보았다.

profile
게임개발자

0개의 댓글