전체 글 176

Unity CLI

참고 영상 요약Unity CLI는 터미널에서 유니티를 다루기 위해 유니티가 새로 내놓은 실행 파일입니다. 에디터 설치부터 프로젝트 생성, 빌드, 테스트까지 명령줄에서 처리할 수 있고, Pipeline 패키지를 얹으면 켜져 있는 에디터까지 조작할 수 있습니다. 파이썬 런타임을 깔거나 에이전트마다 MCP 설정을 잡아 줄 필요가 없어졌다는 게 기존 방식과의 실질적인 차이입니다. 서론Unity CLI는 유니티 에디터를 터미널에서 조작하기 위한 독립 실행 파일이며, Pipeline 패키지와 함께 쓰면 AI 에이전트가 유니티가 정의한 명령어 집합으로 에디터를 직접 다룰 수 있습니다. 지금까지 유니티 작업 대부분을 젯브레인 라이더 IDE 안에서 끝내 왔습니다. 하단 터미널에 Claude Code를 띄워 코드를 다루고..

Tool 2026.09.14

블아 전술 대회 1위 (선진 문화)

블아에는 '전술대회 시즌이 끝나는 마지막 날에 낮은 순위 선생님들이 위로 올라가서 랭킹 보상(청휘석)을 얻을 수 있도록 배려해 주는 돕기 문화'가 있다. 달성한 순위에 따라 1회성으로 보상을 받다 보니 한 번 1위를 달성하면 순위가 떨어져도 상관이 없어서, 이렇게 뉴비 소매넣기 해주는 선진 문화가 있다. 리스트 갱신을 하다 보면 학생들 레벨이 낮거나 스페셜 학생을 빼둔 선생님들을 볼 수 있다. 이런 착한 선생님들을 찾아서 티켓을 충전하면서 올라가다 보면 1위에 도달할 수 있다. 블아를 1년 하면서 이런 문화가 있는 줄 몰랐는데, 친구 덕분에 시즌 마지막 날에 알게 되어 1위 등반에 성공했다. 이번 시즌에 청휘석 2000개 정도 더 먹은 것 같다. 그리고 나도 바로 방덱 비워놓기.

아무거나/게임 2026.09.13

유니티 에디터 메모리 측정(워킹셋 · 커밋 · GC 힙)

서론내 작업 PC의 RAM은 32GB다. 크롬과 JetBrains IDE, 유니티 에디터를 함께 띄워 놓고 작업하다 보니 메모리가 모자라 뻗는 일이 생겼다. 범인을 찾아보니 유니티 에디터였다. 혼자 클라이언트만 만들 때와 달리 서버를 함께 돌려 놓고 작업하게 되면서, 에디터 프로세스 하나가 10GB 가까이까지 올라가 있었다. 문제는 이걸 눈으로 볼 방법이 마땅치 않다는 점이었다. 유니티에는 메모리를 상시로 보여 주는 내장 수단이 없어서, Profiler 창을 일부러 열지 않으면 지금 얼마를 먹고 있는지 알 수가 없다. 그래서 에디터 상단 툴바에 숫자 하나를 얹어 곁눈질로 볼 수 있게 하는 작은 툴을 먼저 만들었다. 그런데 만들고 나니 정작 그 숫자들이 일치하지 않았다. 값이 혼자 크게 오르내렸고, 툴팁의..

Marshalling(마샬링)

서론마샬링은 런타임에 C#과 C++를 잇는 다리라, 그 다리를 자주 건널수록·무거운 짐을 옮길수록 비용이 커집니다.경계 넘는 횟수를 줄이고 blittable 위주로 가볍게 넘기면 됩니다. C#으로 유니티 스크립트를 짜다 보면 결국 엔진 내부의 C++ 코드나 네이티브 플러그인과 데이터를 주고받게 됩니다. 이때 매니지드(C#)와 네이티브(C++)는 데이터를 메모리에 담는 방식이 서로 달라서, 경계를 넘길 때마다 양쪽이 알아들을 수 있는 형태로 데이터를 변환·복사하는 작업이 필요합니다. 이 작업이 바로 마샬링(Marshalling)이고, 이름 그대로 데이터를 경계 넘기 좋게 "정렬·편성"해 넘기는 과정입니다. 그런데 이 마샬링이 왜 성능 문제로 이어지는지, 그 이유와 대응을 정리해 봤습니다. 배경유니티에서 ..

명명 규칙 : Manager / Controller / System

요약 비교 테이블구분핵심 역할적용 범위설계 패턴 및 특징Manager자원 및 전역 상태 관리게임 전체 (Global)주로 싱글톤 패턴, 리소스 풀링Controller입력 처리 및 대상 조작특정 객체 (Local)주로 컴포넌트 형태, 1:1 제어System특정 도메인의 일괄 로직 연산조건에 맞는 다수 객체로직과 데이터의 분리, ECS 구조 Manager (매니저)매니저는 게임 내의 전역적인 상태나 리소스의 생명주기(생성, 보관, 소멸)를 총괄적으로 관리하는 역할을 합니다.담당 범위 : 게임 전체에서 접근해야 하는 데이터나 시스템의 기반 리소스.특징 : 게임 내에 단 하나만 존재해야 하는 경우가 많아 주로 싱글톤(Singleton) 패턴으로 구현됩니다. 하지만 너무 많은 기능을 매니저에 몰아넣으면 결합도가 ..

유니티 2026.07.14

싱글톤 / 서비스 로케이터 / DI 컨테이너

서론 무조건 오른쪽(DI)이 정답이 아니라, 프로젝트 규모와 교체 필요가 다음 칸으로 넘어갈 이유를 만들어줄 때만 이동하는 것이 핵심이다. 전역에서 매니저에 접근하는 방식은 크게 세 가지로 나뉜다. 세 방식은 "얼마나 유연하게 만드느냐 ↔ 얼마나 단순하게 추적하느냐"의 스펙트럼 위에 있다. 이 글은 셋이 각각 뭔지, 뭐가 다른지, 언제 쓰는지만 정리한다. 한눈에 비교항목싱글톤서비스 로케이터DI 컨테이너접근 방식X.Inst 직접Services.Get 창구생성자/필드로 주입인스턴스 획득내가 꺼냄 (pull)내가 꺼냄 (pull)컨테이너가 넣어줌 (push)의존성 노출호출부에 흩어짐메서드 속 Get에 숨음생성자에 드러남인터페이스불가 (구체 고정)선택 (열쇠로 택)선택 (바인딩으로 택)구현 교체불가인터페이스 열..

CS/기타 2026.07.10

서비스 로케이터(Service Locator) 패턴

실제 적용 프로젝트 GitHub - JeongTaeWoong99/Card_GameContribute to JeongTaeWoong99/Card_Game development by creating an account on GitHub.github.com 서론"교체가 필요한 곳에만 인터페이스를 걸고 나머지는 구체 타입 그대로 로케이터에 등록하면, 싱글톤의 편리함은 유지하면서 결합도만 필요한 만큼 낮출 수 있다." 게임 개발할 때 전역 접근이 필요한 매니저 클래스는 보통 싱글톤으로 만든다. 나도 보통은 프로젝트에 X.Inst 형태의 하드 싱글톤을 그대로 썼다. 하지만, '몬스터 AI를 나중에 서버가 붙게 되었을 때, 패킷을 받아 처리하는 플레이어 로직으로 변경해야 할 때, 어떻게 하지?'라는 상황을 생각해보며..

CS/디자인 패턴 2026.07.10

Addressables

분석 프로젝트 Mini_Project/Assets/Project/2_Tutorials/Addressables/README.md at main · JeongTaeWoong99/Mini_ProjectUnity tech demos & study projects (SOLID, Design Patterns, Shaders) - JeongTaeWoong99/Mini_Projectgithub.com 서론 어드레서블은 '에셋을 주소로 부르는' 대신 '비동기와 메모리 반환을 직접 챙기는' 것을 맞바꾼, 중대형·라이브 게임을 위한 유니티 공식 에셋 관리 시스템이다. '어드레서블(Addressable)'은 말 그대로 '주소를 매길 수 있는' 에셋을 뜻한다. 에셋마다 문자열 주소(address)를 붙여두고, 나중에 그 주소만..

STP(Spatial-Temporal Post-processing)

참고 영상AA 정리 글 Anti-Aliasing참고 영상 앨리어싱 (Aliasing) 이란?우리가 보는 모니터는 수많은 사각형 '픽셀'로 이루어져 있습니다. 컴퓨터가 이미지, 특히 사선이나 곡선을 이 픽셀 격자에 표현하려고 할 때 문제가 생깁니다.tae-woong.tistory.com 서론고해상도로 렌더링하면 픽셀 수가 많아 성능 부하가 크다. 그래서 나온 발상이 낮은 해상도로 렌더링한 뒤 고해상도로 끌어올리는(업스케일) 것이다. 유니티 6의 STP가 바로 이 업스케일러다. 이름에 핵심이 담겨 있다. Spatial(공간) 과 Temporal(시간) 을 함께 활용하고, Post-processing(후처리) 단계에서 저해상도 화면을 고해상도로 변환한다. 즉 여러 프레임에 걸친 시간 정보와 한 프레임 안 주변..

GPU Occlusion Culling

참고 영상서론화면에 보이지 않는 물체를 안 그리고 건너뛰면 그만큼 렌더링이 빨라진다. 그 "안 그리고 건너뛰기"를 컬링(Culling)이라고 한다. 유니티 6에는 가려진 물체를 GPU가 런타임에 직접 골라내 건너뛰는 GPU Occlusion Culling이 추가됐다. 이름에 핵심이 담겨 있다. Occlusion은 "가림", 즉 다른 물체에 가려진 것을 뜻하고, 앞에 GPU가 붙은 건 이 판정을 CPU가 아니라 GPU가 런타임에 처리한다는 의미다. 이 기능은 단독으로 동작하지 않고 GPU Resident Drawer를 전제로 한다. (GPU Resident Drawer는 별도 글에서 정리) 배경▶ 프러스텀 컬링 vs 오클루전 컬링컬링에는 크게 두 가지가 있다. 프러스텀 컬링은 카메라의 시야 범위(절두체) ..