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()를 쓰면 좋습니다.
'UnityEngine' 카테고리의 다른 글
| [Unity] 애니메이션에서 함수 호출하는 방법 (0) | 2025.06.16 |
|---|---|
| [Unity] 시네마신 카메라로 화면 흔들리게 하기 (Cinemachine Impulse) (0) | 2025.06.15 |
| [Unity] 전처리 지시문(Unity 용) (0) | 2025.06.13 |
| [Unity] 프로퍼티 직렬화하기 (0) | 2025.06.11 |
| [Unity] PlayerPrefs (0) | 2025.06.10 |