2024-05-23

이재형·2024년 5월 23일
0
post-thumbnail
post-custom-banner

시작하기에 앞서

발표 자료를 최종 제출을 하고 해당 자료를 발표를 하는날이다. 문제 없이 발표 시간내에 발표를 잘 끝마쳤으면 좋겠다.

Unity(2D) 입문

배운 내용

1. UnityEngine.Pool (아직 진행 중)

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: ObejctPool의 구조

설명: 아직 공부 진행중이므로 진행 단계에 대해서만 설명을 하려한다.
1. using UnityEngine.Pool;를 하여 Pool의 기능을 받아온다.
2. IObjectPool Pool로 해당 Pool의 인터페이스 값을 선언해준다.
3. 구조에 맞게 해당 델리게이트에 추가할 메서드와 size에 대해서 값을 넣어준다.
4. 추가한 메서드에 맞게 오브젝트를 제어코드를 추가해준다.
5. Pool의 델리게이트를 실행하여 오브젝트 제어를 진행한다.


2. 객체지향 5원칙(SOLID)

  • SRP (단일책임의 원칙) : 클래스에는 하나의 기능만을 가진다.
  • OCP (개방폐쇄의 원칙) : 기존 요소는 수정이 일어나지 않고 쉽게 확장해서 재사용 할 수 있어야 한다.
  • LSP (리스코브 치환의 원칙) : 부모 객체를 호출하면 자식 객체가 부모 객체를 완전히 대체할 수 있어야 한다.
  • ISP (인터페이스 분리의 원칙) : 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
  • DIP (의존성역전의 원칙) : 추상화에 의존을 해야하며 구체화에 의존을 하면 안된다.

팀 프로젝트 개발 5일차

진행 사항

1. 발표 자료 제출


2. 팀 프로젝트 발표


정리

배운 내용

1. UnityEngine.Pool: 많은 오브젝트르 활용할 때 최적화를 잘 해주는 패턴!
2. 객체지향의 5원칙(SOLID): 잘 지켜야할 원칙!

해결 못한 문제

1. 없음

문제점

1. 없음

끝 마치며...

팀 프로젝트를 만족스럽게 끝내지는 못했지만 특강에서 배운 내용을 다음 프로젝트에서 사용할 수 있도록 하고 더 분발해야겠다고 생각한다.

profile
한국사람
post-custom-banner

0개의 댓글