게임 이벤트 파인더
**레퍼런스 파인더(Reference Finder)**는 현재 활성화된 씬 전체를 스캔하여 특정 게임 이벤트를 참조하고 있는 모든 게임 오브젝트, 스크립트 및 컴포넌트를 찾아내는 강력한 진단 도구입니다.
이 도구는 다음과 같은 중요한 질문에 대한 답을 제공합니다: "이 이벤트를 변경하면 어떤 오브젝트가 영향을 받는가?"
🚀 도구 접속 방법
레퍼런스 파인더는 게임 이벤트 에디터(Game Event Editor)에서 열 수 있습니다.
게임 이벤트 에디터 → 이벤트 행의 🔍 아이콘 클릭
윈도우가 열리면 해당 이벤트에 대한 씬 내의 모든 참조 목록이 표시됩니다.
🖼️ 인터페이스 모드
이 윈도우는 다양한 검사 필요에 맞춰 두 가지 시각화 모드를 지원합니다. 툴바 버튼을 사용하여 모드 간에 전환할 수 있습니다.
목록 모드 (List Mode - Flat View)
모든 참조를 정렬 가능한 간단한 목록 형태로 표시합니다.

적합한 용도: 전체 사용량을 빠르게 훑어보거나 경로 또는 이름별로 정렬이 필요할 때.
그룹 모드 (Grouped Mode - Script View)
참조를 보유하고 있는 스크립트 컴포넌트별로 그룹화하여 표시합니다.

적합한 용도: 어떤 시스템이 이 이벤트에 의존하고 있는지 파악할 때 (예: 5개의 EnemyAI 스크립트와 1개의 GameManager가 이 이벤트를 사용 중임을 확인).
전환: 툴바의 List / Grouped 버튼을 클릭하여 모드를 전환하십시오.
📊 상태 표시기
각 행은 참조하고 있는 오브젝트의 상태에 대한 실시간 피드백을 제공합니다:
| 아이콘 | 상태 | 설명 |
|---|---|---|
| 🟢 | 활성 (Active) | 게임 오브젝트가 현재 하이어라키에서 활성화된 상태입니다. 이벤트 바인딩이 작동 중입니다. |
| 🔴 | 비활성 (Inactive) | 게임 오브젝트가 비활성화된 상태입니다. 활성화될 때까지 이벤트 바인딩이 트리거되지 않습니다. |
📝 참조 상세 정보
각 열은 모든 참조에 대해 상세한 컨텍스트를 제공합니다:
| 열 | 설명 |
|---|---|
| GameObject | 씬 내에 있는 오브젝트의 이름 |
| Hierarchy Path | 전체 하이어라키 경로 (예: Environment/Enemies/Grunt_01) |
| Script | 이벤트를 참조하는 C# 클래스의 이름 (예: PlayerHealth) |
| Type | 코드 내에 정의된 변수 이름 (예: onDeathEvent) |
이 도구는 **리플렉션(Reflection)**을 사용하여 MonoBehaviour의 모든 퍼블릭 및 프라이빗 필드를 스캔합니다. 프라이빗 직렬화 필드(private serialized fields)에 깊숙이 숨겨진 참조도 찾아낼 수 있습니다!
🔍 검색 및 정렬
검색바(Search Bar): 게임 오브젝트 이름, 하이어라키 경로, 스크립트 이름 또는 필드 이름을 입력하여 참조를 필터링합니다. 부분 일치를 지원합니다.
정렬 가능한 열: 열 헤더를 클릭하여 해당 열을 기준으로 정렬합니다. 다시 클릭하면 정렬 순서가 반전됩니다.
⚡ 퀵 액션 (Quick Actions)
우측의 Actions 열은 대상 오브젝트로 즉시 이동할 수 있는 세 가지 강력한 탐색 도구를 제공합니다.
| 버튼 | 아이콘 | 액션 | 사용 사례 |
|---|---|---|---|
| Ping | 🔍 | 하이어라키에서 찾기 | 선택 상태를 변경하지 않고 하이어라키 윈도우에서 오브젝트를 깜빡여 위치를 표시합니다. |
| Focus | 📋 | 인스펙터 포커스 | 오브젝트를 선택하고 즉시 **인스펙터(Inspector)**를 활성화하여 스크립트를 바로 편집할 수 있게 합니다. |
| Frame | 🎥 | 씬에서 포커스 | 오브젝트를 선택하고 씬 뷰(Scene View) 카메라를 이동시켜 해당 오브젝트를 화면 중앙에 맞춥니다. |
🛠️ 툴바 기능
툴바는 참조 뷰를 관리하기 위한 추가 컨트롤을 제공합니다:
새로고침 버튼 (🔄): 현재 씬을 다시 스캔하여 참조 목록을 업데이트합니다. 씬을 변경한 후 유용합니다.
모두 선택 버튼 (👁️): 하이어라키에서 참조된 모든 게임 오브젝트를 한 번에 선택합니다. 일괄 작업 시 유용합니다.
목록/그룹 토글 (📁 / 📄): 단순 목록 뷰와 스크립트별 그룹 뷰 사이를 전환합니다.
💡 실전 활용 사례
리팩토링 전 확인
질문: "이 이벤트의 이름을 바꾸거나 삭제하면 어떤 오브젝트가 고장 날까?"
답변: 변경 사항을 적용하기 전에 파인더를 열어 모든 참조를 확인하십시오. 확인된 각 참조를 그에 맞게 업데이트하십시오.
디버깅
문제: "이벤트가 예상대로 발생하지 않습니다."
해결책: 파인더를 사용하여 활성화된 게임 오브젝트에 참조가 존재하는지 확인하십시오. 상태 표시기(🟢/🔴)를 통해 오브젝트가 활성화되어 있는지 체크하십시오.
정리 및 최적화
목표: "프로젝트를 정리하기 위해 사용하지 않는 이벤트를 제거하고 싶습니다."
과정: 각 이벤트에 대해 파인더를 엽니다. "0 References"라고 표시된다면 해당 씬에서 그 이벤트는 안전하게 삭제할 수 있습니다.
팀 문서화
필요성: "팀원들을 위해 특정 이벤트가 어떤 시스템에서 사용되는지 문서화해야 합니다."
결과: 파인더는 스크린샷을 찍거나 문서로 기록할 수 있는 이벤트 사용처의 완전한 목록을 제공합니다.
❓ 문제 해결
참조를 찾을 수 없음
가능한 원인:
- 이 이벤트가 현재 씬에서 사용되지 않음
- 참조가 다른 씬에 존재함 (파인더는 현재 활성화된 씬만 스캔함)
- 이벤트를 코드를 통해서만 사용함 (
AddListener()사용 시 리플렉션 스캔으로 감지 불가) - 참조가 씬에 배치되지 않은 프리팹 내에 존재함
해결책: 다른 씬을 확인하거나 이벤트 에셋에서 유니티 기본 기능인 "Find References in Scene"을 사용하십시오.
비활성 참조 (Inactive References)
원인: 게임 오브젝트가 하이어라키에서 비활성화되어 있습니다.
영향: 이벤트 바인딩은 존재하지만, 게임 오브젝트가 활성화될 때까지 트리거되지 않습니다.
조치: 게임 오브젝트를 활성화하거나, 이것이 의도된 동작(예: 오브젝트 풀링)인지 확인하십시오.
참조 횟수 불일치
일반적인 이유:
- 각 프리팹 인스턴스는 별개의 참조로 카운트됩니다.
- 동일한 스크립트 내의 여러 필드가 각각 개별 참조로 카운트됩니다.
- 비활성화된 게임 오브젝트도 카운트에 포함됩니다 (상태 아이콘 확인).
📖 워크플로우 예시
시나리오: 데미지 시스템을 리팩토링 중이며 OnPlayerDamaged 이벤트를 변경해야 합니다.
1단계: 게임 이벤트 에디터를 엽니다.
2단계: OnPlayerDamaged 이벤트를 찾아 🔍 아이콘을 클릭합니다.
3단계: 파인더 결과 검토:
3 References Found:
├─ PlayerHealth (Script) - Active 🟢
├─ UIHealthBar (Script) - Active 🟢
└─ DeathScreen (Script) - Inactive 🔴
4단계: 퀵 액션을 사용하여 각 참조로 이동:
- 🔍 Ping을 클릭하여 하이어라키 내 위치 확인
- 📋 Focus를 클릭하여 인스펙터에서 열기
- 필요한 만큼 각 참조를 업데이트
5단계: 모든 사용처를 파악했으므로 안전하게 리팩토링 완료
🔗 관련 도구
파인더(Finder) vs 에디터(Editor):
| 도구 | 범위 | 적합한 용도 |
|---|---|---|
| 게임 이벤트 에디터 | 프로젝트 내 모든 이벤트 | 이벤트 라이브러리 탐색 및 관리 |
| 게임 이벤트 파인더 (본 도구) | 단일 이벤트 참조 | 영향 분석 및 디버깅 |
이벤트를 삭제하거나 이름을 바꾸기 전에는 항상 파인더를 확인하십시오. 현재 씬에서 "0 References"로 표시되더라도 다른 씬이나 코드 기반 리스너에서 사용 중일 수 있습니다.
파인더는 현재 활성화된 씬만 스캔합니다. 여러 씬에 걸친 참조를 확인하려면 다음을 수행하십시오:
- 각 씬을 개별적으로 엽니다.
- 각 씬에서 파인더를 실행합니다.
- 결과를 수동으로 취합합니다.
프로젝트 전체의 에셋 검색을 원하신다면 이벤트 에셋 자체에서 유니티 기본 기능인 "Find References in Scene"을 사용하십시오.