본문 바로가기
게임 개발

[Unity] BrickOutGame - 오브젝트 풀링 (1)

by chobbo 2024. 5. 16.

오늘은 팀원분들과 와이어프레임 작성 및 기능 분배를 주로 하였다!

열심히 만들어본 와이어프레임 ㅋㅋ..

내가 맡은 기능은 벽돌 생성 및 패턴 부여이다

분배한 기능들

벽돌 생성과 충돌 부분은 어렵지 않게 금방 구현할 수 있었다.

아직 구리긴 하다

보기엔 이래도 충돌이랑 벽돌 점수 부분은 구현된거다

using UnityEngine;

public class Brick :MonoBehaviour
{
    [SerializeField] private int HP;
    [SerializeField] private int Score;

    private BrickUI brickUI;
    private void Awake()
    {
        brickUI = GetComponent<BrickUI>();
        brickUI.UpdateBrickHPTxt(HP);
    }

    private void GetAttack(int damage)
    {
        HP -= damage;
        if (HP <= 0 )
        {
            HP = 0;
            // TODO ::  AddScore(Score) & 오브젝트풀 끄기
        }
        brickUI.UpdateBrickHPTxt( HP );
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        // TODO :: 아이템 등을 사용하여 공의 데미지가 늘어났을 때 수정
        GetAttack(1);
    }
}

 

 

그리고 벽돌 패턴을 구현할 때에 오브젝트 풀링을 사용하기 위해 공부하는 시간을 가졌다.

 

오브젝트 풀링

- 유니티에서 오브젝트를 생성하고 부수는 과정에서 흔히 Instantiate, Destroy를 사용

    -> 그러나 이 두 함수는 상당히 비싼 비용이 든다.

- 만약 게임 내에서 지속적으로 Instantiate및 Destroy를 해주면 게임 성능이 많이 떨어지겠지?

그럴 때 사용하는 기법이 오브젝트 풀링이다.

- 자주 사용하는 오브젝트를 미리 생성

  사용할 때는 오브젝트풀한테 빌려서 사용

  삭제할 때는 오브젝트풀한테 돌려주는 개념이다.

- 즉 단순하게 오브젝트를 활성화 비활성화 만 하는 개념

 

왜 쓰는게 좋을지 고민해보자

스테이지 별로 생성되는 벽돌이 다르기 때문에 GameScene을 여러 개 만들까도 생각해보았지만,

팀원 분들과 상의해보니 나중에 아이템을 구현할 때나 레벨이 올랐을 때

무작위 위치에서 벽돌이 생성되는 경우가 발생할 수 있겠다라고 생각되었다.

 

그 때마다 오브젝트를 Instantiate하고 Destroy해주는 것 보다 

오브젝트 풀링을 사용하여 무작위 위치에서 벽돌이 생성될 때 그냥 SetActive(True) 해주는 것이 

더 효율적인 메모리 사용 방법인 것 같았다. 

내일은 오브젝트 풀링을 활용한 맵 생성에 집중해 볼 것이다 !!!