| 분류 | 방법 | 설명 | 장점 | 단점 |
|---|---|---|---|---|
| 직접 연결 | public 변수 참조 |
Inspector에서 다른 오브젝트나 컴포넌트를 드래그해서 직접 연결 | - 직관적, 간단함 |
GetComponent<T>() | 같은 GameObject 내의 다른 컴포넌트를 찾음 | - 간단함GetComponentInChildren<T>() | 자식 오브젝트에서 컴포넌트를 찾음 | - 계층 구조로 컴포넌트 찾을 수 있음 | - 성능 저하GetComponentInParent<T>() | 부모 오브젝트에서 컴포넌트를 찾음 | - 위 계층 참조 가능 | - 과하게 사용 시 혼란 유발 |
| 오브젝트 찾기 | GameObject.Find() | 이름으로
씬 안의 오브젝트를 찾음 | - 빠르게 테스트 가능 | - 성능 저하FindObjectOfType<T>() | 타입으로
첫 번째로 발견된 오브젝트를 찾음 | - 특정 타입 접근 간편 | - 느림FindObject**s**OfType<T>() | 해당 타입의 모든 오브젝트 배열을 반환 | - 여러 오브젝트를 한 번에 다룸 | - 매우 느림- 런타임 성능 저하 |
| 싱글톤
패턴 | public static Instance | 클래스에 전역 접근 가능한 인스턴스를 만들어 어디서든 접근 | - 전역 접근 가능UnityEvent, C# 이벤트, Delegate | 직접 참조하지 않고 이벤트를 통해 연결된 함수 호출 | - 느슨한 연결 (Loose coupling)GameObject.FindWithTag() | 특정 태그를 가진 오브젝트를 찾음 | - 구조화된 찾기 가능 | - 태그 관리 필요| 상황 | 추천 방법 |
|---|---|
| 같은 오브젝트 내에서 다른 컴포넌트 참조 | GetComponent<T>() |
| 부모/자식 간 접근 | GetComponentInParent<T>(), GetComponentInChildren<T>() |
| UI, 매니저 등 특정 오브젝트 | public 변수 + Inspector 연결, Singleton |
| 파편적이고 많은 오브젝트 관리 | FindObjectsOfType<T>() 후 배열 처리 |
| 전역적으로 자주 접근 (예: GameManager) | Singleton |
| 독립적, 확장 가능한 구조 필요 | 이벤트, ScriptableObject |
Player가 Level Sprite Shape.Surface Effector 2D.Speed를 조절하고 싶다!
⇒ 씬 안에 대상이 하나임으로 FindObjectOfType 사용 가능
⇒ 느림으로 Start에서 한 번만 호출



Object.FindObjectOfType<T>() 메서드는 더 이상 권장되지 않는(deprecated) 방법이기 때문이에요.
Unity는 최신 버전 (2023+, 6000.1 포함) 에서 이 메서드를 다음과 같은 이유로 사용하지 말 것을 권장하고 있어요.
'Object.FindObjectOfType<T>()'은 사용되지 않습니다.
→ 대신 아래 중 하나를 사용하라는 의미예요:
Object.FindFirstObjectByType<T>()
Object.FindAnyObjectByType<T>()





