일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 언리얼 엔진5
- 포인터
- C++
- Unreal Engine
- 게임 개발
- 언리얼엔진
- 자료구조
- 디자인패턴
- 데이터구조
- Unreal Engine5
- 게임개발
- 프로세스
- cpp개발
- 복사대입연산자
- BehaviorTree
- 소멸자
- UE5
- 생성자
- 프로그래밍
- 언리얼
- effectivec++
- 언리얼엔진5
- CPP
- Unreal
- 복사생성자
- 배열
- 게임프로그래밍패턴
- C언어
- 언리얼5
- AI
- Today
- Total
목록CPP (35)
리얼 개발

#include #include using namespace std;#define LOG(Str, Number) cout 해당 프로그램의 출력 결과는 어떻게 나올지 고민해보자. 고민 다 하셨나요? 출력 결과는 다음과 같다. 고민한 부분과 비슷할 수도, 아닐 수도 있는데 그 이유는 컴파일러가 똑똑해서다.NRVOFunc() 함수를 호출했을 때 동작 순서는 다음과 같을 것이다.NRVOFunc 함수 내에서 지역 변수 Test t 선언으로 일반 생성자 호출리턴값을 위해 t 객체를 이용한 복사 생성t 객체의 소멸자 호출Test t = RVOFunc() 에서 RVOFunc() 의 자리는 복사 생성으로 리턴된 객체가 있음Test t 는 복사 생성으로 리턴된 객체를 복사 생성리턴된 객체의 소멸자 호출즉 일반 생성자 ..
#include #include struct Data{ int age; //나이 char name[100]; //이름 int balance; //지갑 속의 용돈};struct Test{ Test(int a) {}};void Print(Data user){ std::cout 위의 구절은 인자가 하나인 생성자를 염두에 두지 않고 선생님께서 쓰신 말같다. Test test = 1; // 2. 구조체 내 변수의 순서에 맞추어 리터럴을 함수의 인수로 사용하여 변수를 초기화한다면, // 다음과 같은 에러가 발생한다. 이 문제의 해결 방안은 구조체의 생성자를 만들어 제공하면 된다. // Data user02(33, "이순신", 200000); // 3. 그러나 아래와 같이 중괄호를 사용한다면, 초기화가 혀용된다. ..
0. 소스 코드 작성 ( Source Code )C++로 소스 코드를 작성했다고 가정ex) main.c 1. 전처리 ( Preprocessing )컴파일러가 코드를 해석하기 전에 전처리기 ( preprocessor ) 가 동작하여 #include, #define 같은 지시문을 처리한다.#include 해당 헤더파일이 실제 코드로 변환됨.그 후 .i 파일이 생성됨.ex) main.c → main.i 2. 컴파일 ( Compilation )전처리된 .i 파일이 컴파일러를 통해 중간 언어인 어셈블리어로 변환됨.ex) main.i → main.s 3. 어셈블 ( Assembly )컴파일러가 생성한 중간 언(어셈블리 코드)를 어셈블러 ( Assembler ) 가 변환하여 바이너리 형태의 오브젝트 파일을 생성한다...
0. 이진 탐색 트리이진탐색트리란 이진탐색(binary search)과 연결리스트(linked list)를 결합한 자료구조의 일종이다. 이진탐색의 효율적인 탐색 능력을 유지하면서도, 빈번한 자료 입력과 삭제를 가능하게끔 고안됐다. 1. BST 기본 연산별 시간복잡도연산 평균 시간복잡도 최악 시간복잡도 (Skewed Tree)탐색 (Search)O(log N)O(N)삽입 (Insert)O(log N)O(N)삭제 (Delete)O(log N)O(N) 2. 시간 복잡도 분석1) 평균적인 경우 (Balanced BST) → O(log N)트리가 균형 잡힌 경우 (Balanced Tree), 즉 거의 완전 이진 트리라면:트리의 높이(h)는 O(log N)탐색, 삽입, 삭제 연산 모두 최대 log N 번만 비교하..

게임에선 많은 데이터들이 사용된다. 이러한 데이터를 저장하고 정리하는 방법들은 다양하다. 언리얼은 많은 데이터 저장 방법을 제공하며 대표적으로 데이터 애셋과 데이터 테이블이 있다.여기선 데이터 테이블을 소개하고 사용법을 간단히 알아보고자 한다. 데이터 테이블 (Data Table)데이터 테이블은 FTableRowBase 구조체를 기반으로 CSV, JSON 같은 형식의 데이터 파일을 가져와서 다룰 수 있는 방식이다. 특징은 다음과 같다.FTableRowBase를 상속받은 구조체를 사용하여 데이터의 형식을 정의함.엑셀, CSV, JSON과 호환 가능하여 대량의 데이터를 쉽게 관리할 수 있음.게임 플레이 도중 데이터를 변경할 수 없음 (즉, 게임 시작 전에 데이터가 고정됨).고정된 대량의 데이터 관리에 적합 ..
📌 해시 테이블(Hash Table) 개념해시 테이블(Hash Table) 은 키(Key)와 값(Value)을 매핑하여 저장하는 자료구조.즉, 특정 데이터를 빠르게 찾고, 삽입하고, 삭제하는 데 최적화된 구조.✅ 1. 해시 테이블의 개념1) 키(Key)와 값(Value)Key(키): 데이터를 찾기 위한 고유한 식별자 (예: 이름, ID, 해시값)Value(값): 키에 대응하는 저장된 데이터 📌 예시: 학생 성적 저장cpp복사편집hash_table["Alice"] = 95;hash_table["Bob"] = 88;hash_table["Charlie"] = 72; Key ValueAlice95Bob88Charlie722) 해시 함수(Hash Function)해시 함수는 Key를 특정한 인덱스(Index)..
객체 풀 패턴 (ObjectPool Pattern) 이란생성 디자인 패턴으로, 필요에 따라 객체를 할당하고 삭제하는대신 사용할 준비가 된 일련의 초기화된 객체 "풀"을 사용한다. 클라이언트가 객체를 사용해야 하는 상황이 되면 미리 객체를 생성해 모아놓은 "풀"에 객체를 요청하고, 클라이언트가 객체 사용을 완료하면 삭제하는 대신 "풀"에 반환한다. 이러한 객체 풀 패턴은 게임 개발에서 자주 사용하곤 한다. (다른 곳에서는 어떤지 잘 모르겠음) 패턴 사용 상황내가 탄막 게임을 만드는 개발자라고 생각해보자. 화면을 가득 채우고 있는 탄환들은 어떻게 생성해야 할까?탄환은 계속해서 이동해야하며, 플레이어가 조종하는 캐릭터와 충돌했을 때 충돌 판정이 필요하다.이런 탄환들은 하나의 객체로 화면에 생성되고 삭제됨을 ..
항목 18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자좋은 인터페이스는 제대로 쓰기에 쉬우며 엉터리로 쓰기에 어렵다. 인터페이스를 만들 때는 이 특성을 지닐 수 있도록 고민하자.인터페이스의 올바른 사용을 이끄는 방법으로 는 인터페이스 사이의 일관성을 잡아주기, 그리고 기본제공 타입과의 동작 호환성 유지하기가 있다.사용자의 실수를 방지하는 방법으로는 새로운 타입 만들기, 타입에 대한 연산을 제한하기, 객체의 값에 대해 제약 걸기, 자원 관리 작업을 사용자 책임으로 놓지 않기가 있다. 항목 19 : 클래스 설계는 타입 설계와 똑같이 취급하자C++에서 새로운 클래스를 정의한다는 것은 새로운 타입을 하나 정의하는 것과 같다.효과적인 클래스를 설계하기 위한 고려사항들새로 정의한 타입의 ..

Unreal Build System 은 언리얼 엔진 빌드 프로세스를 자동화시키는 툴 모음을 말한다. 일반적인 수준에서 Unreal Build Tool과 Unreal Header Tool 은 언리얼 빌드 시스템을 지원한다. Unreal Build Tool (UBT)UBT는 언리얼 프로젝트 C++ 소스들의 빌드 과정을 총괄하는 프로그램이다. 바이너리 파일 위치는(언리얼 버전)\\Engine\\Binaries\\DotNET\\UnrealBuildTool\\UnrealBuildTool.exe다음과 같으며 언리얼 엔진을 빌드할 때 Unreal Build Tool도 C# 컴파일러를 이용해서 같이 빌드된다. Unreal Build Tool 동작 방식언리얼 기본 C++ 프로젝트를 생성하면 다음 3개의 C# 파일이 프..

GTA5 무기 선택 창처럼 무기를 교체하는 시스템을 만들어보자. 무기 클래스 제작바꿀 무기를 먼저 제작해주기로 했다. WeaponBase 부모 클래스를 만들고 Sword, Bow, Staff 클래스들이 WeaponBase를 상속받도록 설계했다. 업캐스팅을 통해 관리하기 쉽고 공통된 코드를 줄이고자 함이다. UI 클래스 제작UserWidget 클래스를 상속받아 제작했다. Sword, Bow, Staff 가 적힌 버튼 3개를 만들고 버튼 클릭시 해당하는 무기로 교체할 수 있도록 해보자.#include "UI/WeaponChoiceUI.h"#include "Components/Button.h"#include "Player/CPlayerController.h"#include "Interface/TakeW..