[Unity] 기즈모(Gizmos) 그리기

Learning 

When: 1학년 6월 14일

 

How:

저번에 전처리 지시문을 사용하면서 알게 된 기능인데, Unity에서 게임을 실행하지 않고 있을 때도 씬이 보인다면 실행하는 함수가 있다는 것을 알았습니다. 그리고 그 함수 중에 씬에 기즈모를 그려 씬에서 범위를 조정하거나 동선을 보거나 하는 제작자 입장에서 아주 편리한 OnDrawGizmos() 라는 함수가 있다는 사실도 알게 되어 공부하게 되었습니다.

 

Understanding:

이 함수를 가진 스크립트를 오브젝트에 컴포넌트로 추가하면, 게임의 실행 여부와는 관련 없이 유니티의 씬 화면에 기즈모가 보입니다.

#if UNITY_EDITOR
    private void OnDrawGizmos()
    {
        Gizmos.color = Color.green;
        Gizmos.DrawLine(new Vector2(transform.position.x - areaSize /2, transform.position.y),
            new Vector2(transform.position.x + areaSize / 2, transform.position.y));
            // 자신 위치에서 왼쪽으로 areaSize 변수의 절반만큼 선을 그리고 반대쪽도 절반만큼 그리는 코드
    }
#endif

이 컴포넌트를 붙인 오브젝트를 6개 생성한 사진에서는, 인스펙터 창에서 선의 길이를 조절할 수 있습니다.

 

저는 이 기즈모를 이용하여 에너미의 스폰 범위를 조절하였는데, 다른 용도로도 많이 사용할 수 있을 것 같습니다.
참고로 OnDrawGizmosSelected() 라는, 오브젝트를 선택했을 때만 기즈모가 나오는 함수가 있으니 이것도 사용하면 씬 화면이 더러워지는 것을 방지할 수 있을 것 같습니다.

기즈모를 그릴 때 사용하는 메서드는 다양한데, 아래에 많이 사용되는 Gizmos 메서드가 있습니다.

메서드 이름 설명 (그리기)
Gizmos.DrawLine(Vector3 좌표(한 점), Vector3 좌표(한 점)) 두 점 사이의 선
Gizmos.DrawWireCube(Vector3  중심점, Vector3  크기) 와이어 형태의 정육면체
Gizmos.DrawCube(Vector3  중심점, Vector3  크기) 채워진 정육면체
Gizmos.DrawWireSphere(Vector3 중심점, float 반지름) 와이어 형태의 구
Gizmos.DrawSphere(Vector3 중심점, float 반지름) 채워진 구
Gizmos.DrawIcon(Vector3 중심점, string 이름, bool 씬 뷰 확대 시 자동으로 크기 조절할지 여부 ) 씬에서 줌 인, 줌 아웃을 했을 때 크기가 변하는지 bool 값으로 확인 할 수 있다. 
Gizmos.DrawRay(Vector3 시작점, Vector3 방향) 시작점에서 방향으로 광선 그림
  • 2D에서는 z축을 0으로 하거나 Vector2 형식으로 사용하면 됩니다.
  • DrawRay는 DrawLine(시작점, 시작점 + 방향)과 같은 효과가 나타납니다.
  • Gizmos.color로 색상 설정을 할 수 있습니다.
  • 기본 아이콘은 아래와 같이 생겼습니다. (※ 여기서 그림이 들어갈 수 있습니다.)

 

Result: 값을 조정하고 바로 씬에서 보고 싶은 것이 있으면 OnDrawGizmos()를 쓰면 좋습니다.