문제
중앙의 Enemy가 발사한 탄막은 모두 보라색 탄막으로 처리되어야 하나, 오렌지색 탄막이 섞임. 진짜 미스테리.
히스토리
여러 곳을 디버그해본 결과, Dequeue 도중의 GetGo 에서 문제가 있는 것으로 파악됨.
그런데
public GameObject GetGo(string goName)
{
if (goDic.ContainsKey(goName) == false)
{
Debug.LogFormat("{0} 오브젝트풀에 등록되지 않은 오브젝트입니다.", goName);
return null;
}
return objectPoolDic[goName].Get();
}
C#
복사
도무지 여기에서 문제가 생길 여지가 보이지가 않음…
objectPoolDic
goDic
설마 goName의 앞 몇글자만 보고 판단하여 오브젝트를 가져온다던가…? 그렇지는 않을 것 같은데
또한 여기서 goDic이 관여하는 건 없으므로 objectPoolDic[goName].Get(); 가 오작동한다고 보는 게 맞겠다.
한가지 증상이 더 발견되었는데, 탄막이 사용될수록 전체 Pool 크기가 줄어든다는 것이다.
아무래도 위 링크와 같은 문제가 발생한 것으로 보이지만, 해결책은 보이지 않았다.
당장 쉽게 해결할수는 없을 것 같아 보류.
그런데 켜 두고 시간이 좀 더 지나니까 서로 관계없는 탄막끼리도 서로 뒤섞이기 시작했다. 매우 큰 문제.
Pool 전체 코드
GPT 리뷰
코드 전체적인 부분에서, 여러 Prefab을 관리하기 위해 개선해야 할 점이 많아보인다.
2024.04.08
아무래도 유니티에서 제공하는 오브젝트 풀링 내부에서 문제가 발생한다는 생각이 들어 새로운 오브젝트 풀링 모델을 사용.
유니티 패키지를 사용하지 않아 커스텀으로 더 코드를 손볼 수 있다는 장점이 있음
그 중 하나로, 레퍼런스에 추가로 풀의 오브젝트들의 초기화(Rigidbody-velocity, 위치, 회전) 로직을 구현하여 반납했던 오브젝트를 다시 대여할 때 생기는 버그를 해결.