발표 자료를 최종 제출을 하고 해당 자료를 발표를 하는날이다. 문제 없이 발표 시간내에 발표를 잘 끝마쳤으면 좋겠다.
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Pool;
public class ObjectPool : Singleton<ObjectPool>
{
private List<GameObject> objects;
private const int minSize = 50;
private const int maxSize = 300;
public IObjectPool<GameObject> Pool { get; private set; }
void Awake()
{
base.Awake();
//pool = new List<GameObject>();
//for (int i = 0; i < minSize; i++)
//{
// pool.Add(CreateObject());
//}
Init();
}
private void Init()
{
Pool = new ObjectPool<GameObject>(CreateObject, GetObject, ReleaseObject,
DestroyObject, true, minSize, maxSize);
foreach (GameObject obj in objects)
{
// 미리 오브젝트 생성 해놓기
for (int i = 0; i < minSize; i++)
{
Enemy clone = CreateObject().GetComponent<Enemy>();
clone.Pool.Release(clone.gameObject);
}
}
}
private GameObject CreateObject()
{
// [요구스펙 1] Create Object
GameObject obj = Instantiate(objects[0]);
obj.GetComponent<Enemy>().Pool = this.Pool;
return obj;
}
public void GetObject(GameObject obj)
{
// [요구스펙 2] Get Object
obj.SetActive(true);
}
public void ReleaseObject(GameObject obj)
{
// [요구스펙 3] Release Object
obj.SetActive(false);
}
public void DestroyObject(GameObject obj)
{
Destroy(obj);
}
}
설명: 아직 공부 진행중이므로 진행 단계에 대해서만 설명을 하려한다.
1. using UnityEngine.Pool;를 하여 Pool의 기능을 받아온다.
2. IObjectPool Pool로 해당 Pool의 인터페이스 값을 선언해준다.
3. 구조에 맞게 해당 델리게이트에 추가할 메서드와 size에 대해서 값을 넣어준다.
4. 추가한 메서드에 맞게 오브젝트를 제어코드를 추가해준다.
5. Pool의 델리게이트를 실행하여 오브젝트 제어를 진행한다.
1. UnityEngine.Pool: 많은 오브젝트르 활용할 때 최적화를 잘 해주는 패턴!
2. 객체지향의 5원칙(SOLID): 잘 지켜야할 원칙!
1. 없음
1. 없음
팀 프로젝트를 만족스럽게 끝내지는 못했지만 특강에서 배운 내용을 다음 프로젝트에서 사용할 수 있도록 하고 더 분발해야겠다고 생각한다.