【Unity】동적 생성되는 GameObject에 Inject하는 방법
개요
느슨하게 결합된 클래스 설계로 개발할 때 매우 편리한 Zenject/Extenject입니다만,
취급의 어려움 때문에, 약간의 일로 빠져 버립니다.
이번에는 동적으로 생성된 GameObject가 Inject되지 않는 문제와 그 해결책을 설명하겠습니다.
Prefab 동적 생성
다음과 같은 Prefab이 있습니다 (이하 "플레이어 Prefab"이라고 표기).
플레이어 Prefab에는 Player.cs가 연결되어 있습니다.
Player.cs// ゲームステータスを管理するマネージャ
[Inject] GameManager manager;
void Start()
{
// ゲームステータスがGOなら処理を行う
if(manager.GetGameState == "GO"){
// 好きな処理を書く
}
}
그리고 Scene 내에는 위치 정보만의 PlayerSpawner 객체가 있으며, PlayerSpawner.cs가 첨부되어 있습니다.
플레이어 Prefab은 Hierarchy에 설치하지 않고 PlayerSpawner.cs에 의해 동적으로 생성되는 사양으로 합니다.
PlayerSpawner.cs[SerializeField] GameObject playerPrefab;
void Start()
{
// プレイヤーPrefabを動的生成する
Instantiate(playerPrefab, new Vector3(0, 0, 0), Quaternion.identity);
}
이상의 조건으로 실행해 보면, Player.cs에 NullReferenceException의 에러가 발생합니다.
에러의 원인은 어태치처의 플레이어 Prefab가, PlayerSpawner로부터 동적 생성된 것에 의해 Inject 되지 않고, manager가 null가 되어 버리기 때문이군요.
해결책
매우 간단하고 ZenAutoInjector를 플레이어 Prefab에 연결하면 OK입니다.
DI Container를 직접 사용하고 InstantiatePrefab을 수행하여 해결할 수 있지만 코드를 낭비하지 않고도 ZenAutoInjector를 사용하는 것이 좋습니다.
Reference
이 문제에 관하여(【Unity】동적 생성되는 GameObject에 Inject하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Sumatch/items/3ba8e1ec103c734e36f4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
다음과 같은 Prefab이 있습니다 (이하 "플레이어 Prefab"이라고 표기).
플레이어 Prefab에는 Player.cs가 연결되어 있습니다.
Player.cs
// ゲームステータスを管理するマネージャ
[Inject] GameManager manager;
void Start()
{
// ゲームステータスがGOなら処理を行う
if(manager.GetGameState == "GO"){
// 好きな処理を書く
}
}
그리고 Scene 내에는 위치 정보만의 PlayerSpawner 객체가 있으며, PlayerSpawner.cs가 첨부되어 있습니다.
플레이어 Prefab은 Hierarchy에 설치하지 않고 PlayerSpawner.cs에 의해 동적으로 생성되는 사양으로 합니다.
PlayerSpawner.cs
[SerializeField] GameObject playerPrefab;
void Start()
{
// プレイヤーPrefabを動的生成する
Instantiate(playerPrefab, new Vector3(0, 0, 0), Quaternion.identity);
}
이상의 조건으로 실행해 보면, Player.cs에 NullReferenceException의 에러가 발생합니다.
에러의 원인은 어태치처의 플레이어 Prefab가, PlayerSpawner로부터 동적 생성된 것에 의해 Inject 되지 않고, manager가 null가 되어 버리기 때문이군요.
해결책
매우 간단하고 ZenAutoInjector를 플레이어 Prefab에 연결하면 OK입니다.
DI Container를 직접 사용하고 InstantiatePrefab을 수행하여 해결할 수 있지만 코드를 낭비하지 않고도 ZenAutoInjector를 사용하는 것이 좋습니다.
Reference
이 문제에 관하여(【Unity】동적 생성되는 GameObject에 Inject하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Sumatch/items/3ba8e1ec103c734e36f4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Unity】동적 생성되는 GameObject에 Inject하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Sumatch/items/3ba8e1ec103c734e36f4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)