Unity TIL

램해·2025년 4월 15일

오브젝트

게임 오브젝트는 Scene에서 모든 개체의 기본 클래스이다.
우리는 게임을 하면서 각종 사물, 사람, 몬스터 들을 봤을 것이다.각각을 오브젝트라고 부르며 게임을 구현하는데 필수적인 요소이다.

prefab

미리 만들어둔 object 들의 구성들이다.
예를 들어서 우리가 마을의 NPC를 5명 정도 만들고 싶다고 했을 때 각각의 NPC의 신체, 성격, 대화창 등을 5번 만드는게 아니라 처음 만든 NPC틀을 복사해서 5명의 NPC에게 조금씩 다른 수정을 통해 개성을 부여함으로써 5개의 다른 NPC를 만들 수 있는 것이다.

SerializeField

Unity에서 private 또는 protected 필드도 인스펙터에 표시할 수 있게 해주는 속성이다.
즉 직렬화는 하되, 코드를 더 쉽게 업데이트하기 위할 때, 변수의 접근 제어자는 유지하고 싶을 때 사용한다.

생성(instanait)과 파괴(Destroy)

우리가 오브젝트를 만들 때 처음부터 만들어져 있는 오브젝트에 반해 플레이어가 동작을 했을 때 생성되고 파괴되는 오브젝트도 있을 것이다.
예를 들어서 플레이어가 총을 쏜다고 가정할 때 총에서 총알이 생성되지만 파괴를 지정하지 않으면 맵에 계속 남아있기에 메모리 할당을 위해 일정 시간 후에 파괴시킨다는 형식으로 쓰인다.

가비지 컬렉터(메모리 단편화)

앞서 말한 생성과 파괴에서 더 자세히 들어가보자
우리가 오브젝트를 생성하면 일정량이 메모리에 저장되고 파괴되면 사라진다. 그렇기에 가비지 컬렉터라는 것이 필요한데, 가비지 컬렉터는 자동 메모리 관리 시스템으로, 더 이상 사용되지 않는 메모리를 자동으로 회수하여 메모리 누수를 방지하는 역할을한다.

아래의 그림1에서 8이라는 값을 넣고 싶다 하지만 들어갈 수 있는 자리가 없기에 2와 3사이에 안쓰는 값이 있음에도 3 다음에 새로운 자리를 만들어서 8값을 넣을 수 밖에 없다.
그림 1

그렇기에 가비지 컬렉터를 사용하면 쓸모없는 자리를 정리해줘서 자리를 만들어 줄 수 있다.
그림 2

오브젝트 풀 패턴(Object Pool)

가비지 컬렉터에서 2와 3사이의 자리를 정리하는데에도 약간의 성능 저하가 발생된다. 그렇기에 최대한 성능 저하를 줄이고자 오브젝트 풀 패턴을 사용한다. 오브젝트 풀 패턴은 주로 성능 최적화를 위해 사용하는 디자인 패턴으로, 객체를 미리 생성하고 재사용하여 반복적인 객체 생성과 파괴로 인한 성능 저하를 방지하는 방법이다.
예를 들어서 총알이 6발 쏠 수 있는 총이라는 프리펩이 있다고 가정하자. 총의 총알은 1발 쏠 때마다 생성되고 파괴되면 메모리 누수가 엄청나다. 그렇기에 오브젝트 풀 패턴을 사용하여 총알 6발을 게임의 로딩창에서 만들어 둔 후에 총을 쏠 때 6발을 빌려온 후 파괴되지 않고 다시 되돌아오는 형식이다.

단점으로는 풀 크기를 관리하지 않으면 메모리 낭비가 극심하다.

0개의 댓글