public enum PoolType
{
Enemy,
Item,
Bullet
}
public GameObject GetObject(PoolType key)
{
if (PoolDictionary.ContainsKey(key) && PoolDictionary[key].Count > 0)
{
GameObject obj = PoolDictionary[key].Dequeue();
obj.SetActive(true);
return obj;
}
return null;
}
GetObject 메서드를 사용한다고 가정하자.
여기서 매개변수는 Pooltype(Enum)이다.
[SerializeField] private List<GameObject> enemies;
GameObject enemy = ObjectManager.Instance.GetObject(enemies[randomEnemy]);
그러나 여기서 GetObject를 불러와서 enemies[randomEnemy]를
매개변수 값에 넣는다면 오류가 발생한다.
타입이 다르기 때문이다.
enemies[randomEnemy]는 List<GameObject> 타입이고
ObjectManager.GetObject(PoolType)는 Enum 타입이기 때문에 직접 연결이 안 된다.
해결한 방법
[Header("Enemy Settings")]
[SerializeField] private List<GameObject> enemies;
[SerializeField] private List<ObjectManager.PoolType> enemiesTypes;
ObjectManager.PoolType의 리스트를 만들어 선언후
ObjectManager.PoolType selectEnemiesType = enemiesTypes[randomEnemy];
GameObject enemy = ObjectManager.Instance.GetObject(selectEnemiesType);
리스트의 값을 selectEnemiesType 변수에 저장하여 맞춰준다.
단, 이 경우 동일한 인덱스로 접근하고 있기 때문에
enemies 리스트와 enemyTypes 리스트의 순서를 일치시켜야 한다.
(Index는 하나인데, 리스트를 동시에 참조한다면)
'개발일지' 카테고리의 다른 글
오브젝트 풀링에서 활성화된 오브젝트만 가져오기 (0) | 2025.04.16 |
---|---|
리소스 데이터 관리(제네릭 T, TryGetValue, TryAdd) (0) | 2025.04.08 |
Enum 사용하기 (0) | 2025.03.26 |
SceneManager.GetActiveScene(), AddListener (0) | 2025.03.21 |
플레이어까지 거리(벡터) 구하기 (0) | 2025.03.19 |