GameObject 주입·스폰
ObjectInstaller는 계층 전체를 한 번에 주입하거나, 프리팹/컴포넌트 프리팹을 인스턴스화한 뒤 주입하는 오버로드를 제공합니다.
InjectGameObject
public void InjectGameObject(GameObject root, bool includeInactive = true);
-
root가null이면 즉시 반환합니다. -
root를 포함해GetComponentsInChildren<MonoBehaviour>(includeInactive)로 모든 대상을 얻고,
각각InjectTarget(target)을 호출합니다.
의미 : 각 MonoBehaviour에 대해 InjectTarget → TryInjectTarget 이 돌아갑니다.
[Inject] 필드는 Bake된 참조만 쓰고, [SceneInject]/[GlobalInject] 는 이때 Resolve됩니다.
SpawnInjected (GameObject 프리팹)
-
SpawnInjected(prefab)— 위치(0,0,0), 회전 항등, 부모null로Instantiate후InjectGameObject(instance). -
SpawnInjected(prefab, parent)— 동일 위치·회전, 지정 부모 아래 생성. -
SpawnInjected(prefab, position, rotation, parent)— 풀 시그니처.
반환값은 생성된 GameObject 입니다. prefab이 null이면 null입니다.
SpawnInjected<T> (MonoBehaviour 프리팹)
T : MonoBehaviour 제약:
-
SpawnInjected(T prefab)—Instantiate(prefab)후InjectTarget(instance)만 호출 (자식 트리는 자동 순회하지 않음). -
위치·회전·부모 오버로드도 동일하게
InjectTarget만 합니다.
차이 : GameObject 버전은 서브트리 전체에 InjectGameObject를 돌리고,
T 버튼은 루트 컴포넌트 한 개만 InjectTarget합니다.
자식들도 주입하려면 InjectGameObject(instance.gameObject) 를 추가로 호출하거나 GameObject 프리팹 API를 쓰십시오.
풀 구조의 다형성을 보장하기 위해 위와 같이 디자인 되었습니다.
풀 연동
InjectTargetFromPool
public void InjectTargetFromPool(MonoBehaviour target);
내부적으로 TryInjectTarget(target, logWarnings: true, isReinjection: true) 입니다.
성공 시 IPoolInjectionTarget.OnPoolGet() 경로를 타고, IInjected.OnInjected() 는 재주입 모드에서는 호출되지 않습니다.
ReleaseTargetToPool
public void ReleaseTargetToPool(MonoBehaviour target);
-
대상이
IPoolInjectionTarget이면OnPoolRelease()호출. -
타입의
GetGlobalInjectFields/GetSceneInjectFields에 대해 각Setter(target, null)로 참조를 비웁니다.
로컬 [Inject] 직렬화 필드는 이 API로 지우지 않습니다. 풀에 넣기 전 로컬 참조 정리가 필요하면 별도 처리합니다.
// 풀에서 꺼냄 → 재주입
installer.InjectTargetFromPool(pooled);
// 풀에 넣음 → 콜백 + 글로벌/씬 필드 null
installer.ReleaseTargetToPool(pooled);