PROGRAMING📚/Unity📑

[유니티 TIPS] 어디에서나 사용하는 DirtyFlag 패턴 | 프로그래밍 디자인패턴

Ta이니 2025. 2. 25. 10:26

 

1. 🏁 더티 플래그 패턴의 개념과 필요성

  • 더티 플래그 패턴은 널리 사용되며 디자인 패턴에 포함된 개념이다.

  • 이 패턴은 이름만으로는 의미가 명확하지 않아 다소 생소하게 느껴질 수 있다.

  • 더티 플래그는 주로 동적 객체의 상태 변경을 최소화하고 효율성을 높이는 데 사용된다.

 

2. 🚀 오픈 월드에서의 더티 플래그 활용

  • 오픈 월드를 구현할 때, 캐릭터 주변의 환경만 로딩하고, 벗어나면 그것을 언로딩하는 방식이 필요하다.

  • 메모리를 관리하기 위해서는 월드를 청크 단위로 나누어 캐릭터의 이동에 따라 필요한 지역만 메모리에 활성화해야 한다.

  • 더티 플래그 시스템은 메모리를 효과적으로 관리하기 위한 필수적인 방법이며, 활성화와 비활성화를 주목적으로 한다.

  • 이 시스템은 다양한 분야에서 폭넓게 사용되며, 거의 모든 시스템에서 필수 요소로 자리잡고 있다.

  • 특히, 라키 템과 같은 복잡한 구조에서도 더티 플래그가 적용되며, 다양한 부품의 상태를 관리하는 데 유용하다.

 

3. 🛠️ 더티 플래그 패턴의 활용과 필요성

  • 더티 플래그 패턴은 복잡하고 비용이 많이 드는 환경에서 주로 사용되어야 하며, 이는 장면에서 많은 계산과 업데이트가 빈번히 발생하는 경우에 적합하다.

  • 이 패턴은 일반적으로 단순한 불리언 플래그로 구현되며, 필요에 따라 확장하여 사용할 수 있는 구조로 되어 있다.

  • 개층 구조에서는 부모의 트랜스폼이 변경될 때 하위 객체 모두가 함께 이동해야 하며, 이로 인해 발생하는 중복 계산을 줄이기 위해 더티 플래그가 필요하다.

  • 따라서, 상태가 변경될 경우에는 플래그를 켜고 한 프레임이 끝난 후에 모든 업데이트를 한 번에 수행함으로써 불필요한 계산을 최소화하는 것이 중요하다.

  • 궁극적으로, 더티 플래그는 동적 객체의 상태 변경에 따른 계산 비용을 줄이는 데 주 목적이 있으며, 이러한 원리는 모든 게임 엔진에서 적용된다.

 

4. 🖥️ UI 시스템에서의 더티 플래그 활용

  • UI 시스템은 레이아웃그래픽 요소로 구성된 개층 구조로 되어 있으며, 각 요소의 상태 변화에 따라 더티 플래그가 활성화된다.

  • 여러 개의 더티 플래그가 동시에 존재할 수 있으며, UI 변경 시 레이아웃 처리와 그래픽 처리를 위한 플래그가 따로 구분되어 사용된다.

  • 성능 최적화를 위해 변경 시에는 단순히 더티 플래그를 처리하고, 실제 재생성은 나중에 수행하도록 설계되어 있다.

  • UI 시스템은 사용자의 입력에 따라 매 프레임마다 재생성을 시도하기보다는 더티 플래그를 통해 효율적으로 처리하도록 되어 있다.

  • 이와 같은 플래그 시스템을 통해 UI의 효율적인 처리가 가능하다는 점에서, 실제 개발 코드에서도 구현되어 있음을 확인할 수 있다.

 

5. 🕹️ 더티 플래그 패턴의 게임 환경 실시간 로딩

  • 대규모 오픈 월드 게임은 실시간 로딩을 통해 리소스를 효율적으로 관리해야 하며, 전체 게임 환경을 한 번에 로드하는 것은 어렵기 때문에 플레이어가 볼 수 있는 환경만 로드하는 전략이 필요하다.

  • 이때 게임 레벨은 여러 청크 단위로 나뉘어 있으며, 플레이어가 특정 영역으로 이동할 때 더티 플래그를 활성화하여 필요한 환경만 로드하거나 언로드한다.

  • 또한, 플레이어의 위치에 따라 조건을 체크해 더티 플래그를 조정하며 가까이 있는 경우 로드하고 멀리 있는 경우 언로드하는 방식으로 메모리 관리가 이루어진다.

  • 이과정에서 플레이어와 섹터 간의 거리를 체크하고, 섹터가 로드된 상태인지 전략적으로 판단하여 메모리 리소스를 최적화하는 데 중점을 둔다.

 

6. 🗺️ 더티 플래그의 범용성

  • 그래서 더티 플래그는 하이킹 시스템을 포함한 다양한 시스템에서 사용될 수 있다.

  • 그리고 더티 플래그의 개념은 여러 시스템에서 기본적으로 활용될 수밖에 없는 중요한 개념이다.

  • 따라서 이 내용으로 더티 플래그 시스템에 대한 설명을 마무리할 수 있다.