분류 전체보기 53

싱글톤 패턴 (Singleton Pattern)

1. 한 줄 정의싱글톤 패턴은클래스의 인스턴스를 오직 하나만 생성하도록 보장하고,전역 접근 지점을 제공하는 디자인 패턴이다. 2. 왜 싱글톤을 쓰는가?다음과 같은 시스템은 하나만 존재해야 한다.게임 매니저입력 시스템사운드 매니저설정(Config) 관리자👉 여러 개가 생기면 상태 불일치 문제 발생 3. 기본 구현 방식 (C++) class GameManager{public: static GameManager& Get() { static GameManager Instance; return Instance; }private: GameManager() {}}; 특징정적 지역 변수 사용프로그램 종료 시 자동 소멸C++11 이후 스레드 안전 보장 4. 싱글톤의 핵심 ..

GameDevelop/Notes 2026.01.11

옵저버 패턴 (Observer Pattern)

1. 한 줄 정의옵저버 패턴은한 객체의 상태 변화가 발생했을 때이를 구독한 객체들에게 자동으로 알리는 패턴이다. 2. 왜 옵저버 패턴이 필요한가?다음과 같은 문제를 해결하기 위해 사용한다.객체 간 강한 결합(Dependency) 제거상태 변화에 대한 자동 통지이벤트 기반 구조 구현// 나쁜 예Player.TakeDamage();UI.UpdateHP();Sound.Play();Quest.Check();👉 Player가 너무 많은 걸 알고 있음 3. 기본 구성 요소1) Subject (Publisher)상태를 가지고 있음옵저버를 등록 / 제거 / 통지2) Observer (Subscriber)Subject의 변화를 통지받음갱신 로직 수행 4. 구조 다이어그램 (개념)Observer ←─┐Observer ..

GameDevelop/Notes 2026.01.11

가상 함수 테이블 (Virtual Table, vtable)

1. 한 줄 정의가상 함수 테이블은런타임 다형성을 구현하기 위해객체가 사용할 가상 함수 주소들을 저장한 테이블이다. 2. 왜 vtable이 필요한가?컴파일 타임에는 다음을 알 수 없다.Base* obj = new Derived();obj->Update(); // Base 클래스와 Derived 클래스 중 어떤 Update?👉 실제 타입은 런타임에 결정이를 위해 C++은 vtable을 사용한다. 3. vtable 생성 시점컴파일 시클래스마다 vtable 구조가 결정됨런타임 시객체 생성 시 vtable 포인터(vptr)가 설정됨👉 객체마다 vtable이 있는 게 아니다👉 클래스당 하나의 vtable 4. 객체 메모리 구조[..

GameDevelop/Notes 2026.01.11

TArray, TMap

언리얼 엔진의 TArray와 TMap에 대해 정리해보았습니다.구글링 및 AI를 참고했습니다. Unreal Engine의 TArray와 TMap1. Unreal 컨테이너를 왜 따로 쓰는가?언리얼 엔진에는 STL 대신 자체 컨테이너(TArray, TMap, TSet) 가 있다.이유는 다음과 같다.엔진 메모리 관리 시스템과 통합Garbage Collection / Reflection 지원플랫폼별 최적화직렬화(Serialize) 지원👉 STL보다 엔진 친화적 2. TArray란?1) 한 줄 정의TArray는 언리얼 엔진의 동적 배열 컨테이너다.STL의 std::vector 와 유사하다.2) 기본 특징연속 메모리 구조인덱스 기반 접근자동 크기 확장3) 내부 구조 핵심내부적으로 힙 메모리 연속 할당Capacity..

해시테이블과 해시충돌

해시테이블과 해시충돌에 대해 정리해보았습니다.구글링 및 ChatGPT의 도움을 받아 작성했습니다. 해시 테이블과 해시 충돌 정리1. 해시 테이블이란?키(Key)를 해시 함수로 변환해배열 인덱스로 사용하여 값을 저장·조회하는 자료구조 해시 테이블을 사용하는 핵심 이유는 빠른 탐색이다.빠른 탐색 (평균 O(1)) 2. 왜 해시 테이블이 빠른가?일반적인 자료구조와 비교하면: 구조 탐색 시간 배열O(1) (인덱스 필요)리스트O(N)트리O(log N)해시 테이블O(1) (평균)👉 키 → 인덱스로 바로 접근하기 때문 3. 해시 테이블의 기본 구성1) Key검색 기준 값예: ID, 좌표, 문자열2) Hash FunctionKey → 정수값으로 변환이 값으로 배열 인덱스 결정3) Bucket (버킷)실제 데이터가..

GameDevelop/Notes 2026.01.09

A* 알고리즘

A* 알고리즘에 대해 정리해보았습니다.구글링 및 ChatGPT의 도움을 받아 작성했습니다. A* 알고리즘목적지까지 가장 짧을 것 같은 길을 먼저 탐색하는 길찾기 알고리즘이다. A*는 모든 노드에 대해 이 값을 계산한다.f(n) = g(n) + h(n) g(n)시작점 → 현재 노드까지 실제로 이동한 비용h(n)현재 노드 → 목표 지점까지의 추정 비용f(n)이 노드를 선택할 “우선순위 점수”👉 f 값이 가장 작은 노드를 먼저 탐색 실제 동작 흐름시작 노드를 Open List에 넣는다Open List에서 f 값이 가장 작은 노드를 선택그 노드를 Closed List로 이동 (탐색 완료, 방문한 길)인접 노드들에 대해:g, h, f 계산더 좋은 경로면 값 갱신목표 지점에 도달하면 종료 h(n) = 휴리스틱..

GameDevelop/Notes 2026.01.05

[원신 별바다세계] 코인 획득 / 충돌체 처리 / 점수 증가

막상 작업을 해보려니 어려운 부분이 많아서.. 공식 문서를 따라해보면서 차근차근 익히려합니다. 코인 프리팹 생성 및 충돌 시 제거 처리까지 해보겠습니다. 오브젝트 프리팹 - 기본 모듈 - 동적 유닛 - 기타 - 빈 모델 클릭하여 빈 프리팹을 생성해줍니다. 우측 패널에서 이펙트 재생 - 상세편집 클릭합니다. 루프 이펙트로 변경해주고기본 제공하는 루프 이펙트 라이브러리에서 모험 코인을 적용해줍니다. 이펙트 재생 버튼으로 확인해볼 수 있으며, 코인이 땅에 파묻혀있기 때문에 오프셋 Y값을 0.5f 올려줍니다. 이제 충돌 트리거를 추가합시다.공용 컴포넌트 추가 - 충돌 트리거 클릭. 상세 편집 클릭. 트리거를 추가 후, 위치를 잘 맞춰줍니다. 그리고 네이티브 충돌은 꺼줍니다.밑의 옵션 때문에 충돌 시 등..

[원신 별바다세계] 카메라 시점 고정하기

뱀서 라이크 (탕탕특공대)를 만들어보려 합니다. 먼저 카메라를 탑뷰 ~ 쿼터뷰로 고정해보겠습니다. 좌측 상단 메뉴를 열어서 '메인 카메라 관리' 클릭. 기본설정 - 모드 - '2.5D 카메라' 클릭.바로 원하던 각도가 되었습니다. 좌상단의 미리보기 창을 확인하면서, 카메라의 위치나 거리 등을 더 상세하게 조절합니다.그 후 '미리보기 모드 진입' 버튼으로 플레이 시의 카메라를 바로 확인해볼 수 있습니다.

[원신 별바다세계] 별바다세계 만들기 / 에디터 열기

원신 별바다 세계에서 간단한 게임을 만들어보려 합니다.게임을 만드면서 막히거나 하는 부분 위주로 게시글 작성해볼까 합니다. 원신 6.2 버전 기준입니다. +)훨씬 간단한 방법을 찾아 위에 덧붙입니다. 원신 메인메뉴에서 '내 별세계' 버튼을 통해 진입할 수 있습니다. (기존 글) 일단 별바다세계 메인 UI를 열어줍니다. 일단 아무 게임이나 클릭해준 뒤 로비로 가기를 클릭합니다. 로비로 들어가면 우측 상단 메뉴에서 체스말 아이콘을 확인할 수 있습니다. 해당 아이콘 클릭 후 '새 저장 파일 생성' 클릭해주면 에디터가 열립니다.

l-value와 r-value

l-value와 r-value 정리입니다.구글링 및 ChatGPT의 도움을 받아 작성했습니다. 1. 한 문장 정의l-value: → 메모리에 이름이 있고, 다시 접근할 수 있는 값r-value: → 임시로 생성되며, 이름이 없고 곧 사라질 값2. 코드로 보는 차이int a = 10;// a → l-value// 10 → r-valuea = 20; // OK10 = a; // 컴파일 에러 👉 l-value는 대입의 왼쪽에 올 수 있다. 3. 메모리 관점에서의 차이l-value메모리 주소가 있음수명이 명확함참조 가능r-value임시 객체표현식이 끝나면 소멸주소를 직접 잡기 어려움 4. 참조(&, &&)와의 관계l-value reference (T&)void Func(int& x);l-value만 받을 수 ..

GameDevelop/Notes 2026.01.01