본문 바로가기

전체 글

(23)
UnityEngine.Pool 네임스페이스의 오브젝트 풀링 사용 게임 개발 과정에서 필수적으로 등장하는 패턴 중 하나가 바로 오브젝트 풀링이다. 총알 등 오브젝트를 너무 자주 생성/파괴하는 바람에 프레임이 떨어지는 등의 경험을 했다면 오브젝트 풀링에 대한 정보를 접해 보았을 것이다. 이 글에서는 유니티에서 오브젝트 풀링을 왜, 어떻게 사용하는지를 살펴보고 UnityEngine.Pool.ObjectPool를 사용하는 법에 대한 실무적인 내용을 소개한다. 오브젝트 풀링은 왜 쓸까?오브젝트 풀링을 사용하는 데에는 두 가지의 이유가 있다.오브젝트 생성/파괴 비용 감소일반적으로 풀링을 도입하기로 결정하는 가장 큰 이유Instantiate는 매우 비쌀 수 있다. 간단한 오브젝트의 경우는 꽤 빠르지만, 복잡한 구조의 프리팹, 여러 컴포넌트가 달려있는 오브젝트 등 초기화 과정이 무..
Span<T>, Memory<T> 소개와 활용법 이 글에서는 C#의 아주 강력한 도구 중 하나인 Span을 소개하며 심층적으로 알아본다. 더불어 실무에서 발생하는 오해 사례, 그리고 최적의 활용 방법을 제시한다.Span이란? Span은 .NET Core 2.1, C# 7.2부터 지원되는 기능이다. 만약 C# 7.2 이상을 사용하지만 Span이 BCL에 포함되어 있지 않다면, Nuget 등에서 System.Memory 패키지를 받아 런타임에 추가할 수 있다. 흔히 Span에 대해 찾아보면 메모리에 대한 뷰(View)라는 설명이 나온다. 이 설명이 생소하다면, 단순히 메모리의 어느 부분을 가리키는 포인터라고 생각해도 좋다. 단순 포인터와 다른 점은, 메모리상의 특정 위치를 가리킬 뿐만 아니라 그 점에서부터 특정한 길이까지를 접근하고 다룰 수 있게 해 준다..
유니티 6 Awaitable 소개 유니티 2023에서부터 Awaitable이 도입되었다. 이 글은 Awaitable에 대해 간단히 소개한다. private async Awaitable AwaitSomething(){ await Awaitable.EndOfFrameAsync(); await Awaitable.NextFrameAsync(); await Awaitable.FixedUpdateAsync(); await Awaitable.WaitForSecondsAsync(1.0f);} Awaitable이란? C# System.Threading.Tasks의 대안으로 사용할 수 있는, 유니티 전용 Awaiter이다. C# BCL Runtime에서 호출되는 Task와 달리 유니티 업데이트 사이클과 연동되는 장점이 있다. 예를 들..