
게임 내에서 플레이어가 경험할 수 있는 환경과 구조를 만드는 과정. 플레이어의 경로, 도전, 그리고 스토리를 설계하며, 게임플레이의 재미와 균형을 조화롭게 담아내야합니다.레벨 디자인은 시각적 요소의 배치를 넘어, 플레이어 경험의 핵심을 설계하는 역할.레벨디자인우선, 언

C++는 덴마크의 컴퓨터 과학자인 Bjarne Stroustrup이 개발하여 1985년 출시되었다. 운영체제 개발에서 C 언어와 함께 사용되며,고 수준의 서버 및 PC 소프트웨어에서도 사용된다. C++는 C 언어의 확장판이라고도 한다. 하위 수준인 C 언어를 기반으로

앞서 만든 성적 관리 프로그램에서 성적을 한번만 구하는 경우는 대부분 없다. 많은 경우에 동일한 작업을 반복하는 경우가 많다. 그럴 때마다 동일한 코드를 계속 작성 하는 것 보다 우리가 하는 작업을 정의해서 이름을 붙이고, 이 이름을 부를 때마다 그 작업을 해주는 것을
클래스 > C++은 객체지향 프로그래밍언어이다. 그 첫걸음으로 class에 대해 배워보겠다. class없는 성적 관리 프로그램 코드이다. 이 코드에는 어떤 문제가 있을까? 과목의 개수가 늘어나면 함수의 호출 방식이 변경된다. 즉 기존의 코드는 동작x 성적 관리를 하

상속, 다형성

이번에는 자원을 관리하는 것에 대해 공부해보자. 스택 메모리 > 일반 변수들은 대부분 스택 메모리 공간을 차지 한다. 스택 메모리의 특징은 변수의 생존 주기가 끝나면 변수 선언시 할당되었떤 메모리도 저절로 회수가 된다. 따라서 사용자가 따로 메모리를 관리 해줄 필요가

오늘 우리의 목표는 아래와 같다.• 템플릿을 사용하여 타입 독립적인 코드를 작성할 수 있다.• 재사용성을 높이는 프로그래밍 방식을 학습한다.프로그래밍에서 두 수를 더하는 계산기를 생각해보자.실세계 에서는 그냥 두 수를 더한다고 생각하는 반면, 프로그래밍 측면에서는 변수

오늘은 STL에 대해 배울려고한다 STL은Standard Template Libarary로 C++에서 자체적으로 제공하는 표준 라이브러리이다.STL에는 개발 시 유용하게 사용되는 컨테이너, 알고리즘이 구현되어 있기 때문에, 개발자는 헤더파일을 추가하고 사용하기만 하면

오늘은 객체지향적 설계에 대해배워보자. 객체지향 프로그래밍적인 설계를 할 수 있다. 응집도와 결합도 개념을 익히고 이를 활용한 코드 작성이 가능하다 SOLID 원칙을 이해하고 설계할 수 있다. 응집도 응집도는 클래스 내 모듈들이 얼마나 관련되어 있는지를 나타낸다. 즉
디자인 패턴이란 "개발 시 반복적으로 등장하는 문제를 해결하기 위한 일반화 된 솔루션" 이라고 정의 할 수 있다. 경험이 많은 개발자들이 구현을 하면서 많이 고민하는 문제를 아래와 같이 정리해서 만든 패턴이다. 출처 : 자바 구조 패턴은 어떻게 쓰일까? | 요즘IT
언리얼 엔진은 개인 개발 엔진이다. 1988년 에픽 게임즈Epic Games가 개발했으며, 1인칭 슈팅 게임(FPS)을 위해 만들어졌다. 지금은 대전 게임, RPG, 스텔스 게임, MMORPG 등의 게임을 만드는 데에도 쓰인다. 주로 C++ 언어가 사용되고, 게임 개발

오늘은 팀프로젝트에 들어가기 앞서서 code Convention과 협업에서 쓸 github 커밋 규칙과 같은것을 배웠다. Code Convention

오늘 프로젝트를 시작하면서 협업프로그램 Github에 주의사항에 대해 기술하겠다.우선 팀원들과 작업을 할 repository를 만들 때 먼저 repository를 만들지말고 visualStudio에서 C++ 콘솔앱을 만들어서 솔루션 통째로 올려야한다. 그렇지않으면 나중
설명: C++에서 std::rand()와 std::srand()를 사용해 랜덤 값을 생성하고, 시드 값을 설정하는 방법에 대해 배웠다.내용:std::srand()는 랜덤 시드를 설정하는 함수로, 이를 통해 프로그램을 실행할 때마다 다른 난수를 생성할 수 있다.std::
C++의 std::sort 함수는 세 가지 인자를 받을 수 있다.각 인자의 의미는 다음과 같습니다:시작 반복자 (arr)정렬을 시작할 범위의 첫 번째 요소를 가리키는 반복자이다.보통 배열의 경우 시작 주소를 사용합니다.끝 반복자 (arr + size)정렬을 멈출 범위의
아래는 코드카타 문제중 하나이다. 숫자나라 기사단의 각 기사에게는 1번부터 number까지 번호가 지정되어 있습니다. 기사들은 무기점에서 무기를 구매하려고 합니다. 각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 합니다. 단, 이웃나

Visual Studio를 실행하고, 좌/우측 패널에 있는 Solution Explorer 창을 열어보자.여기서 프로젝트 폴더들이 계층적으로 표시되는데, 실제 Windows 탐색기에서 보았던 프로젝트 폴더 구조와는 조금 다를 수 있다.Visual Studio는 빌드와
언리얼 엔진에서 Actor vs. Object 이해하기 언리얼 엔진을 학습하다 보면, 가장 먼저 접하게 되는 개념 중 하나가 UObject와 AActor이다. 둘 다 엔진에서 매우 중요한 클래스 계층을 이루고 있으므로, 차이점을 확실히 알아두면 좋다. 1️⃣ Obj
Transform 속성 이해하기 1️⃣ Actor와 Transform Actor (액터)는 언리얼 엔진에서 게임 세계(월드)에 존재하는 모든 오브젝트를 의미한다. 건물, 캐릭터, 아이템 등 눈에 보이는 모든 것들이 액터로 표현된다. 액터에는 세 가지 중요한 속성이

GameMode 이해하기 1️⃣ GameMode란? GameMode는 게임의 전반적인 규칙과 흐름을 총괄 관리하는, 일종의 컨트롤 타워 역할을 하는 클래스이다. 어떤 Character을 플레이어에게 스폰해줄지, 어떤 PlayerController를 사용할지, 승패 조

PlayerController는 "키나 마우스 입력"을 감지하고, 각 입력 액션 (IA)을 활성화해줄 뿐이다. 그다음 캐릭터 클래스(SpartaCharacter)에서 “어떤 함수가 호출될지”를 바인딩해주어야 최종적으로 동작이 이루어진다.정리하자면PlayerControl
STL은 C++에 내장된 템플릿 기반의 라이브러리이며, 크게 컨테이너, 반복자(Iterator), 그리고 알고리즘으로 구성되어 있다!컨테이너(Container): 데이터를 저장·관리하는 구조체(자료구조)들의 집합반복자(Iterator): 컨테이너 내 데이터를 순회(Na
언리얼 엔진5에서 움직이는 발판을 만들기위해서 이렇게 코드를 짜고 빌드를 하고 실행해보았다.. 그랬더니... 이 발판이 MaxRange만큼 움직이기는 하는 것 같은데.. 시작지점에서 멈춰야하는데 멈추지 않는다 그래서 궁금해서 로그를 추가해서 한 번 다시 빌드하고 실
인터페이스 이해하기 1️⃣ 인터페이스란? 인터페이스 (Interface)란 클래스 (또는 오브젝트)가 반드시 구현해야 할 함수 목록만을 미리 정의해 두고, 실제 함수의 동작(구현 내용)은 해당 클래스를 상속받거나 구현하는 쪽에서 자유롭게 작성할 수 있도록 하는 일종
충돌 영역 (Collision Volume)아이템 액터 주변에 SphereComponent나 BoxComponent 같은 충돌 컴포넌트를 붙여둔다.플레이어가 이 영역 안에 들어오면 Overlap 이벤트가 발생하고, 이를 감지해 아이템 획득 로직을 실행할 수 있다.Ove
Map안에 Map넣을 수 있다.예시코드를 보자std::map<std::string>, std::map<std::string>, std::string 구조로 선언하여 Map 안에 또 다른 Map을 값으로 넣었다.외부 Map outerMap의 키는 innerMa

우선순위 큐를 비유하자면, 가장 중요한 일이 제일 먼저 처리되는 대기열이라고 할 수 있다.우선순위 큐의 간단한 특징내부적으로 힙(Heap) 자료구조를 사용.삽입, 삭제(pop)은 항상 O(log N) 이고, top()(가장 우선순위 높은 원소 조회)은 O(1)이다.가장
Actor 클래스에 로그 (Log) 추가하기 게임 개발 중 특정 함수가 제대로 호출되는지, 변수에 어떤 값이 들어있는지를 빠르게 확인해야 할 때는 로그 메시지가 큰 도움이 된다. 언리얼 엔진에서는 UE_LOG 매크로를 사용해 Output Log 창에 메시지를 남길 수

연속 구간의 합을 구하는 문제가 출제가 되면 partial_sum을 사용해 효율적으로 구할 수 있다.unique는 연속된 중복 원소를 제거하여 (끝 위치) iterator를 반환하는 함수다.unique는 정렬이 필수이다. 왜냐면, 방금 얘기했듯 연속된 중복 원소만 제거
시간 복잡도 요구 사항 파악삽입/삭제/탐색을 빈번하게 해야 한다면?map / set 또는 unordered_map / unordered_setunordered_map / unordered_set“가장 큰/작은” 값 빈번하게 추출해야 한다면?priority_queue“앞

언리얼 엔진5 에서 기본 제공하는 스마트 포인터는 일반적인 클래스를 다루는 STL의 C++에서 제공하는 스마트 포인터와 유사한 동작과 쓰임을 제공 한다.하지만 만약 UObject에 스마트 포인터 변수가 멤버 변수로서 선언된다면?이 경우, UObject가 사라지기 전까지
6번 필수 과제 제가 강의를 4주차까지 듣고 과제를 하는걸로 착각을해서 과제를 좀 늦게시작해서 원래 강의를 들으면서 만든 프로젝트에다가 SubjectLevel이라는 맵을 만들어서 배치하여 진행하였습니다. 움직이는 발판 발판의 Component 저는 우선 움직이는

서로 인접한 두 원소를 검사하여 정렬하는 알고리즘인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환한다.선택 정렬과 기본 개념이 유사하다.버블 정렬은 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째를, …

위 그림과 같이 엘레베이터에서 양옆에 거울이 있으면 이런식으로 보인다. 큰 거울 안에 작은 거울이, 그 안에 또 작은 거울이 있다. 하지만 실제로는 언젠가는 너무 작아져서 더 이상 볼 수 없게 되는 순간이 온다. 그게 재귀에서의 종료 조건(멈추는 지점)이다재귀에서 가장

특정한 작업(알고리즘)을 독립적으로 정의하고 캡슐화 하여, 해당 작업을 동적으로 교체할 수 있도록 하는 패턴을 의미한다.우리가 다양한 오리를 구현해야 한다고 가정해보자.Duck이라는 클래스를 작성한 다음, 아래와 같이 여러 오리들이 해당 클래스를 상속하도록 할 수 있다

온라인 게임은 여러명의 사용자가 하나의 콘텐츠(Contents)를 공유하는 게임을 말한다. 장르를 떠나, 크게 보면 실시간과 어싱크 방식 2가지로 나뉘며, 실시간은 온라인 서버(클라우드) 환경과 LAN 파티 환경으로 나뉜다.싱크 - 동기, 어싱크 - 비동기(주로 모바일

네트워크에서 세션을 유지하기 어려운 모바일 환경 등에서 사용하는 방법으로 “보장된 데이터를 사용” 하여 게임 환경을 구축하는 경우이다. 대표적으로 “크래시 오브 클랜”과 같은 게임들이 AP 설계에 기반한다.느리지만, 손실 허용이 안되는 TCP 프로토콜을 사용.이벤트만
“팩토리 패턴(Factory Pattern)”은 객체 생성 로직을 별도의 “팩토리”(메서드·클래스·인터페이스 등)로 캡슐화하여, 클라이언트 코드가 특정 구체 클래스에 직접 의존하지 않도록 하는 생성(Creational) 디자인 패턴 계열을 가리킨다.대표적인 종류Fact
어댑터(Adapter) 패턴은 호환되지 않는 인터페이스를 가진 객체를, 클라이언트(사용자)가 원하는 인터페이스에 맞춰주는 역할을 하는 구조(Structural) 디자인 패턴이다.이름 그대로, 맞지 않는(호환되지 않는) 인터페이스에 어댑터(변환기)를 연결해 원하는 형태로

EnemyCharacter.cpp우선 언리얼 엔진에서 기본적으로 액터가 데미지를 받게해주는 함수인 TakeDamage를 이용하여 구현해 봤다.우선 기본적으로 데미지는 슈팅게임이기때문에 플레이어가 쏘는 총알에의해 Damage를 받게된다. 그 총알의 DamageAmount
프록시(Proxy) 패턴은 어떤 객체(RealSubject)에 대한 접근을 제어하거나, 실제 객체의 대리(Proxy) 역할을 수행하는 구조(Structural) 디자인 패턴이다.“대리인(Proxy)”이라는 뜻처럼, “원본(RealSubject)”을 대신하여 동작, 접근

❗언리얼 채팅에 앞서 우리가 네트워크를 기능을 구현하는데 필수적인 Replication이 무엇인지그리고 어떻게 해야 올바른 접근이 가능 한지에 대해 잠시 살펴보도록 하겠습니다.언리얼의 엔진에서 Replication이란Network Framework API를 상속받아 구
커맨드 패턴(Command Pattern) 은 요청(명령)을 객체의 형태로 캡슐화하여, 요청을 보내는 객체와 처리하는 객체를 서로 분리시키는 디자인 패턴이다.즉, 특정 작업이나 요청을 하나의 객체로 만들어 두면 이 객체를 재사용하거나, 필요에 따라 요청 실행을 나중으로
Subsytem 공식 문서: https://dev.epicgames.com/documentation/ko-kr/unreal-engine/programming-subsystems-in-unreal-engine

📚 Server-Client 모델Unreal Engine은 멀티플레이어 게임에서 Server-Client 구조를 사용한다.이는 Server로 정의된 인스턴스가 게임의 상태에 대한 Authority을 가지며, 다른 모든 인스턴스는 Server로부터 업데이트를 받는 Cl
이번 포스트에서는 게임 개발에서 중요한 시간 관리에 대해 알아보려고 한다. 우리가 일상에서 느끼는 연속적인 시간과 달리, 게임 내 시간은 프레임 단위로 끊어져 있어 여러 가지 특별한 문제와 기법들이 등장하는데요. FPS, Delta Time, 시간 스케일, 네트워크 동

아래는 대용량 데이터를 효율적으로 복제(Replication)하기 위한 방안과 RPC 사용 시 Reliable과 Unreliable의 차이에 대한 정리이다.네트워크 패킷 크기 초과큰 배열이나 구조체를 한 번에 복제하면 네트워크 패킷의 크기 제한을 초과할 위험이 있다.과
게임 개발에서는 실시간 처리, 예측 가능한 물리 연산, AI, 렌더링 등 모든 측면에서 성능 최적화가 필수적입니다.자료구조와 알고리즘은 이러한 최적화의 근간을 이루며, 데이터의 저장, 검색, 정렬, 경로 탐색, 충돌 판정 등 다양한 작업에서 핵심 역할을 합니다.특히 언
이 글에서는 알고리즘의 개념과 게임 개발에서의 중요성을 설명한다.알고리즘은 단순히 문제를 해결하는 절차이며, 좋은 알고리즘은 소프트웨어의 성능, 메모리 관리, 반응 속도에 직접적인 영향을 준다.특히 게임은 실시간 연산이 요구되므로, 효율적인 알고리즘 선택이 필수적이다.
서승우 - 팀원 간 의견을 조율하는 과정이 원활했고, 결정해야 할 상황에서도 서로의 아이디어를 존중하며 합리적인 방향으로 빠르게 결론을 내릴 수 있었던 점이 인상 깊었음.이찬호 - 프로젝트 구조가 파트별로 명확하게 폴더로 분리되어 있어 본인의 역할에 집중하기 쉬웠고,

오늘 배운 내용 네트워크 구성 요소: 단말기, 네트워크 장비, 통신 매체, 메시지 LAN과 WAN 구분 OSI 7계층 개요 메시지 교환 방식: 회선 교환 vs 패킷 교환 프로토콜과 캡슐화/역캡슐화 컴퓨터 네트워크는 크게 단말기와 네트워크 기기로 구성된다.여기
게임 내 캐릭터, NPC, 유닛 등이 장애물을 피해 목표 지점까지 이동하는 최적 혹은 근사 최적의 경로를 찾기 위한 기법을 정리한다.너비 우선 탐색 (BFS)깊이 우선 탐색 (DFS)다익스트라 알고리즘 (Dijkstra)A\* 알고리즘 (A-Star)용도: 비가중치 그
AI 이동 가능 영역을 지정하는 볼륨. 레벨에 배치하면 해당 영역 내부에 내비게이션 메시(NavMesh) 가 자동 생성되고, AI 는 그 범위만 탐색.Place Actors 패널에서 NavMeshBoundsVolume 검색 → 레벨에 드래그. R 키(Scale)로