2024/01/18

안석환·2024년 1월 18일

🧐기본 공부 내용


  1. PoolManager
  • 풀 매니저의 기능 업데이트
    - SpawnFromPool을 사용시 자동으로 추가되고 최적의 메모리 관리가 가능하게 하였다.


💾 코드

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class PoolManager : MonoBehaviour
{

    private Dictionary<string, Queue<GameObject>> poolDictionary;
    public static PoolManager instacne;

    private void Awake()
    {
        instacne = this;
    }

    private void Start()
    {
        poolDictionary = new Dictionary<string, Queue<GameObject>>();
    }

    private GameObject AddTagToDictionary(GameObject addGameObject)
    {
        if (!poolDictionary.ContainsKey(addGameObject.tag))
        {
            poolDictionary.Add(addGameObject.tag, new Queue<GameObject>());
        }

        GameObject obj = Instantiate(addGameObject);
        return obj;
    }

    public void DeSpawnFromPool(GameObject addGameObject)
    {
        addGameObject.SetActive(false);
        poolDictionary[addGameObject.tag].Enqueue(addGameObject);
    }
    public GameObject SpawnFromPool(GameObject addGameObject)
    {
        if (!poolDictionary.ContainsKey(addGameObject.tag) || poolDictionary[addGameObject.tag].All(o => o.activeSelf))
        {
            return AddTagToDictionary(addGameObject);
        }
        GameObject obj = poolDictionary[addGameObject.tag].Dequeue();
        obj.SetActive(true);
        return obj;
    }
}

📖 참고

참고할 코드 내용




⛔️ 에러


  1. PoolManager가 Queue 형식이라서 사라지는 순서가 다르면 ActiveSelf 인 오브젝트를 부른다
  • 시도: 전체다 활성화일 경우 Queue를 더하고 전부다 뺏다 다시 넣는다: 메모리 비효율
  • 해결: Enqueue는 소환할때 Dequeue는 파괴될때로 나누어서 관리하였다.




💭 느낀점


  1. 내일이 금요일이라 기분이 좋다
  • 주말에도 해야하긴하는데 기분이 좋다
profile
안석환!

0개의 댓글