2024/01/16

안석환·2024년 1월 16일
0

🧐기본 공부 내용


  1. ObjectPool
  • 기본 오브젝트 풀에 풀에 사용할 객체가 없을시 생성을 그때그때 하는 코드를 만들었다


💾 코드


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

public class PoolManagerTemp : MonoBehaviour
{
    private Dictionary<string, Queue<GameObject>> poolDictionary;

    public static PoolManagerTemp instance;

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

    private void Start()
    {
        instance = this;
    }
    
    private void AddToDictionary(GameObject instanceObj)
    //PoolManager의 dictionary에 만들려는 객체의 tag가 없을경우
    {
        if (!poolDictionary.ContainsKey(instanceObj.tag))
        {
            poolDictionary.Add(instanceObj.tag, new Queue<GameObject>());
        }
        AddToQueue(instanceObj);
    }

    private void AddToQueue(GameObject instanceObj)
    //PoolManager의 만들려는 tag의 dictionary의 Queue를 한칸 늘린다
    {
        GameObject obj = Instantiate(instanceObj);
        obj.SetActive(false);
        poolDictionary[instanceObj.tag].Enqueue(obj);
    }

    public GameObject SpawnFromPool(GameObject spawnGameObject)
    //소환하려할때 사용
    {
        if (!poolDictionary.ContainsKey(spawnGameObject.tag))
        {
            AddToDictionary(spawnGameObject);
        }
        else if (poolDictionary[spawnGameObject.tag].All(obj => obj.activeSelf))
        {
            int queueCount = poolDictionary[spawnGameObject.tag].Count;
            
            AddToQueue(spawnGameObject);
            while (queueCount == 0)
            {
                GameObject queueObj = poolDictionary[spawnGameObject.tag].Dequeue();
                poolDictionary[spawnGameObject.tag].Enqueue(queueObj);
                queueCount--;
            }
            
        }

        GameObject obj = poolDictionary[spawnGameObject.tag].Dequeue();
        poolDictionary[spawnGameObject.tag].Enqueue(obj);
        obj.SetActive(true);
        return obj;
    }
}

📖 참고

참고할 코드 내용




⛔️ 에러


  1. 풀 매니저에 사용할 객체가 없을 때 추가하는 것이 Queue의 가장 위에 추가되어 바로 사용을 못하는게 문제다
  • Queue의 칸을 늘려줄때 바로 Active(true) 하게하여 바로사용하기
    - 실패
  • Queue에 칸을 추가할때 있던 것들을 전부 위로 다시 올려주기
    - 실패, 메모리 문제




💭 느낀점


  1. 오늘은 모르겠습니다
  • 생각을 덜했나
profile
안석환!

0개의 댓글