Unity/기능

[Unity] BoxCast로 히트 박스 제작하기

turbulence93 2025. 5. 2. 23:19

1.BoxCast 생성하기

오늘 강의 내용에 2D 프로젝트에서 근접 무기를 제작하는 것을 배웠다.

 public override void Attack()
 {
     base.Attack();

     RaycastHit2D hit = Physics2D.BoxCast(
         transform.position + (Vector3)Controller.LookDirection * collideBoxSize.x,
         collideBoxSize, 0, Vector2.zero, 0, target);

     if (hit.collider != null)
     {
         //공격 처리
     }
 }

공격 시, BoxCast로 공격 영역을 생성하여 충돌을 감지하는 방식이다.

BoxCast 구성 요소

  • 중심축 (origin)
  • 크기 (size)
  • 회전각 (angle)
  • 방향 (direction)
  • 거리 (distance)
  • LayerMask

RayCast는 선형 레이저를 쏘는 방식인데, BoxCast는 레이저를 박스 모양으로 만들어서 쏘는 방식이다.
그렇기 때문에 박스를 그려줘야 되는데 중심축을 기준으로 박스의 크기만큼 BoxCast를 그려준다.
그 뒤 전해 받은 회전각으로 박스를 회전 시켜준다. 
BoxCast에 방향과 거리가 들어가는 이유는 RayCast처럼 발사를 하기 때문인데,

위 코드에서는 Vector zero와 0거리를 할당하여 BoxCast가 발사되지 않고 제자리에 있게 만들었다.

중심축을 구하는 코드를 살펴보면

transform.position + (Vector3)Controller.LookDirection * collideBoxSize.x,

기준이 되는 오브젝트의 transform.position에서 바라 보고 있는 방향으로 BoxCast를 그려준다.

처음에 코드를 보고 포지션 값에 박스 크기를 그냥 더 해주면 안되나? 하는 생각이 들었는데,
오브젝트가 바라보는 방향으로 포지션을 할당해야 되기 때문에 방향벡터가 필요하게 된다.

조금 더 풀어서 설명하면, 기준이 되는 오브젝트가 (0,0)에 위치하며 오른쪽을 바라보고 있을 때 2크기의 박스를 그리고 싶다면,
기준점에서 오른쪽으로 2만큼 떨어진 곳인 (2,0) 지점이 BoxCast가 그려질 위치가 된다.
(2,0)을 기준점으로 1-3 공간을 차지하는 BoxCast를 그려주게 되는것이다.
반대로 왼쪽을 바라본다면 (-2,0) 지점에 -1- -3 공강을 차지하는 BoxCast가 그려지기 때문에 단순히 더하기만 해서는 안되고 방향 벡터를 통한 위치 계산이 필요하게 된다.

 

2. Gizmos로 BoxCast 영역 시각화 하기

공격 판정 확인을 위해 BoxCast의 영역을 Gizmos를 만들어 보았다.
사각형 Gizmos를 씬에 시각화 하려면 Gizmos.matrix를 활용하면 간편하게 처리 할 수 있다.

private void OnDrawGizmos()
{
    if (Controller == null) return;

    Vector3 origin = transform.position + (Vector3)Controller.LookDirection * collideBoxSize.x;
    Quaternion rotation = Quaternion.Euler(0, 0, 0); // 회전 각도

    Gizmos.color = Color.red;
    Gizmos.matrix = Matrix4x4.TRS(origin, rotation, Vector3.one);
    Gizmos.DrawWireCube(Vector3.zero, collideBoxSize);
}
  • Matrix4x4.TRS = Translation(위치), Rotation(회전), Scale(크기) 를 의미한다.
  • 중심축을 origin(위치)로 설정 후 회전값과 스케일의 기본 크기를 설정한다.
  • 그 뒤 DrawWireCube를 통해 Vector3.zero를 중심으로 하는 collideBoxSize 크기의 Gizmos를 그릴수 있다.
Gizmos를 통한 공격 범위 확인하기
  • Gizmos를 통해 실시간으로 BoxCast의 위치와 크기를 확인하면서 공격 판정이 정상 작동하는지 확인할 수 있다.