코루틴을 사용한 리소스 비동기 로딩 구현 도중 특정 코루틴의 결과값을 리턴받아야 할 일이 생겼습니다.
public Coroutine LoadCharacterAsync(CharacterData data)
{
return StartCoroutine(LoadCharacterAsyncRoutine(data));
}
IEnumerator LoadCharacterAsyncRoutine(CharacterData data)
{
GameObject characterObject = new GameObject();
PokoCharacter character = characterObject.AddComponent<PokoCharacter>();
// 캐릭터를 구성하는 각 파츠의 SkinnedMesh를 읽어서 생성
for(int i = 0; i < 3; ++i)
{
GameObject loadedParts = null;
yield return StartCoroutine(LoadCharacterPartsRoutine(data.partsName[i]);
// 위 코루틴의 결과값을 어떻게 받지?!
character.AddParts(i, loadedParts);
}
}
IEnumerator LoadCharacterPartsRoutine(string partsName)
{
// Mesh, Texture, Bone, Animation 등등 로딩
}
혹시나 이런 게 되나 싶었는데
IEnumerator LoadCharacterPartsRoutine(string partsName)
{
// Mesh, Texture, Bone, Animation 등등 로딩
return loadedParts;
}
될 리가 없죠;;
IEnumerator로 선언된 메소드 내에서는 ref, out 같은 키워드도 문법적으로 사용할 수 없습니다.
해서 구글링을 해 봤더니 C#의 람다를 콜백으로 사용하는 신박한 방법이 있더라구요.
IEnumerator LoadCharacterPartsRoutine(string partsName)
{
// Mesh, Texture, Bone, Animation 등등 로딩
return loadedParts;
}