2024-05-09

이재형·2024년 5월 9일
0
post-thumbnail

Unity(2D) 입문

배운 내용

1. 오브젝트 풀링

public class ObjectPool : MonoBehaviour
{
    [System.Serializable]
    public class Pool
    {
        public string tag;
        public GameObject prafab;
        public int size;
    }

    public List<Pool> pools = new List<Pool>();
    public Dictionary<string, Queue<GameObject>> PoolDictionary;

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

        foreach(var pool in pools)
        {
            Queue<GameObject> queue = new Queue<GameObject>();
            for(int i = 0; i < pool.size; i++)
            {
                GameObject obj = Instantiate(pool.prafab, transform);
                obj.SetActive(false);
                queue.Enqueue(obj);
            }

            PoolDictionary.Add(pool.tag, queue);
        }
    }

    // 생성
    public GameObject SpawnFromPool(string tag)
    {
        // 태그가 존재하지 않다면
        if (!PoolDictionary.ContainsKey(tag))
        {
            return null;
        }

        // 게임 오브젝트를 생성하고 다시 queue에 넣음
        GameObject obj = PoolDictionary[tag].Dequeue();
        PoolDictionary[tag].Enqueue(obj);
        obj.SetActive(true);
        return obj;
    }
}

설명: 많은 오브젝트를 사용할 때 미리 생성하고 후에 사용이 끝나면 다시 반납하는 방식
사용:
1. 클래스에 생성할 오브젝트의 정보, 개수, 태그를 클래스에 저장함
2. 각 리스트로 클래스를 foreach로 돌려 각 게임오브젝트타입인 Queue를 생성한다.
3. for문으로 오브젝트의 개수만큼 반복하고 Instantiate로 오브젝트를 새로 생성 후 비활성화를 시켜 해당 queue에 추가한다.
4. 딕셔너리에 해당 태그와 queue를 추가한다.
5. SpawnFromPool(string tag)에서 해당 태그를 매개변수로 넣으면 딕셔너리에 저장했던 태그의 queue에서 꺼내고 게임오브젝트타입으로 초기화함
6. 해당 게임오브젝트를 다시 queue에 넣고 게임오브젝트를 활성화시키고 해당 오브젝트를 반환해준다.


2. 싱글 톤

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    void Awake()
    {
        if(Instance != null) Destroy(Instance);
        Instance = this;
    }
}

설명: 클래스의 유일한 Instance를 생성하고 해당 Instance를 전역적으로 접근하여 공유를 할 수 있게 함
사용:
1. 클래스를 생성하고 public static으로 같은 클래스 변수를 생성한다.
2. Awake()를 이용하여 해당 변수가 존재하면 삭제를 시키고 없다면 변수를 자신으로 지정하여 클래스 정보를 자신만 가질 수 있게 함


정리

배운 내용

1. 오브젝트 풀링: 많은 오브젝트를 생성, 삭제가 아닌 활성화 여부로 성능을 향상시킴
2. 싱글 톤: 클래스의 유일한 인스턴스를 만들어 메모리 낭비를 방지함

해결 못한 문제

1. 없음

문제점

1. 배운 내용을 아직 완숙을 하지 못하여 활용할 수 있도록 복습을 해야겠음

profile
한국사람

0개의 댓글