[강의] Haker UE5 소스코드 분석#1(게임 프레임워크) - 2.환경설정
·
Unreal Engine/이것 저것
1. Epic Games 계정 및 GitHub 계정을 생성한다2. Epic Games 계정으로 로그인(UnrealEngine.com)한다. 계정 관리(우상단에 계정이름 클릭 -> '계정' 클릭)에 들어가 '연동된 계정'을 누른다.3. GitHub 연결하기 클릭, 인증 과정과 이메일 초대 수락하여 @EpicGames 조직에 가입을 완료한다.4. https://github.com/EpicGames/UnrealEngine 에서 release Branch(Legacy 버전이 필요하면 해당 Branch로 변경)에서 Code 버튼 클릭하여 Zip 파일 다운로드한다. 5. 압축 해제 후 나온 폴더에서 Setup.bat를 '관리자 권한'으로 실행(약 30분 이상 소요)6. 완료되었다면 GenerateProjectFil..
귤 고르기
·
코딩 테스트/프로그래머스
문제문제 풀이1. 귤을 상자에 문제에서 제시한 수(k)만큼 담았을 때, 크기의 종류가 최소한이 되는 경우(Answer)를 반환하는 문제.2. 전달받은 귤 크기대로 숫자를 세기 위해서 map에 크기별 개수를 기록한다.3. 크기별 개수를 정렬을 위해서 vector에 넣는다. 상자에 넣을 때, 종류의 값이 중요하지 않기 때문에 개수만 vector에 기록하는 것이다.4. 많은 개수부터 상자에 넣기 위해서 내림차순 정렬 수행5. 정렬된 vector의 원소별로 순회하며 귤 수를 담아준다. 반복의 시작에서 현재 박스에 들어가 있는 귤 수가 k보다 크면 반복을 멈추게 하고, 아니라면 Answer를 1개 증가(종류를 1개 증가)시키고 현재 Box에 해당 종류의 귤을 담았다 가정하여 해당 크기의 갯수만큼(해당 Index의..
멀리 뛰기
·
코딩 테스트/프로그래머스
문제문제 풀이1. 처음에는 DFS로 풀 생각을 했다.1.1 예제 케이스는 통과하나 코드 제출 시 시간 초과가 발생했다. 2. 칸 수에 따른 경우의 수를 1~5까지 비교해 본 결과 규칙이 있는 것을 알 수 있었다.ex) 1칸 - 1개 2칸 - 2개 3칸 - 3개 4칸 - 5개 5칸 - 8개=> n칸 = n-1칸의 경우의 수 + n-2칸의 경우의 수. 즉, 피보나치 수열의 형태를 하고 있다. 2-1. 위에서 나온 식을 이용하여 반복문을 사용하여 vector에 결과를 기록하고 해당 번호의 수를 나머지 연산을 통해 반환하면 된다. 코드#include using namespace std;long long solution(int n){ // 한 번에 1칸 혹은 2칸을 뛸 수..
[내용 정리] 2. 프로젝트 구조 - Manager들
·
포트폴리오/Castlevania: Aria of Sorrow 모작
개요Managers1. SceneManager : 씬(Unity의 그 씬, Unreal의 레벨)을 관리해주는 클래스 주 동작은 다음과 같다.CScene 클래스 타입으로 현재 씬과 다음에 불러올 씬을 관리해 준다. 씬 전환 기능 동작 시 Input 콜백 초기화가 함께 동작한다.Init(), Update(), PostUpdate(), Collision(), Render()로 현재 씬을 관리한다.레벨 전환(ChangeScene()) 시 기존 씬을 제거하고 Input 매니저의 콜백 초기화와 씬 교체를 수행한다.bool CSceneManager::ChangeScene(){ if (m_NextScene) { // 기존 장면을 제거한다. SAFE_DELETE(m_Scene); ..
[내용 정리] 1. 프로젝트 개요
·
포트폴리오/Castlevania: Aria of Sorrow 모작
GitHub GitHub - hyounjinJoo/WINAPI_Castlevania: WINAPI 자체 엔진을 활용한 캐슬바니아 비애의 아리아 모작WINAPI 자체 엔진을 활용한 캐슬바니아 비애의 아리아 모작. Contribute to hyounjinJoo/WINAPI_Castlevania development by creating an account on GitHub.github.com게임 제목 및 장르| Castlevania : Aria of Sorrow| 플랫포머, 액션, 메트로바니아 개발 인원| 1인 개발 기간| 2021년 9월 ~ 11월 개발 환경 및 도구| IDE 및 OS : Visual Studio 2019, Window 10| 개발 언어 : C++| API : Window API, MFC,..
예상 대진표
·
코딩 테스트/프로그래머스
문제문제 풀이1. 문제에서 제시한 대로 8명이 참가했을 때, 각각이 이긴다는 경우로 따져보면 아래와 같은 그림을 그리게 된다.2. 이렇게 되면 1이 1이 되고, 2가 1이 되고... 7이 4, 8이 4가 된다는 점인데, 계산이 그리 간단하지 않게 된다.3. 프로그래머에게 익숙한 시작 번호, 0부터 시작한다고 가정하게 되면 값이 깔끔하게 계산된다.(int 타입은 나눗셈 시 소수점 아래는 제거되기 때문)4. 반복문을 이용해 answer를 계산해주면 된다.코드int solution(int n, int a, int b){ // -1 전처리를 통해 나눗셈 시 숫자가 일치할 수 있도록 변경 // ex) 1 / 2 => 0, 2 / 2 => 1 ... 불일치 // 0 / 2 => 0, 1 / ..
[3장] 소용돌이탄 베리에이션
·
책 정리
3.1.1 DIRECTIONAL 일정 방향으로 직진하는 탄방향탄 : 정해진 방향으로 직진하는 탄예제 3-1 방향탄(Stage3.h) 을 쏘는 적class CDirectionalShooter : public CEnemy{public: // 발사 각도 float ShotAngle; // 발사 속도 float ShotSpeed; public: CDirectionalShooter(float Angle = 0.25f, float Speed = 0.1f) : CEnemy(DpEnemy) , ShotAngle(Angle) , ShotSpeed(Speed) {} public: void Move() { // 지정된 각도와 지정된 속도로 탄을 발사 new CBullet(DpRedBullet, X, Y, ShotAng..
[1장] 슈팅 게임의 구조
·
책 정리
슈팅 게임의 정의탄막 게임의 종류와 정의기술 파트구현에 필요한 필수 기술C++과 DirectX(윈도우 기반에서의 그래픽스 대응)C++과 OpenGL(다양한 플랫폼에서의 그래픽스 대응)C#과 XNA(Xbox 전용)기타 등등…화면에 그려지기 까지의 과정(플레이어 이동, 플레이어 탄 이동, 적탄 이동, 등등등…)프레임(주사율과 프레임 레이트에 대한 기본설명)과 프레임 생략 혹은 슬로우 현상 둘 중 하나로 멀티 플레이와 싱글 플레이 구현에 대한 설명종,횡 화면에서의 플레이 및 종 → 횡 or 횡 → 종으로 게임 화면 변경 시의 방법더블 버퍼링(2D / 3D) 혹은 트리플 버퍼링(3D에서 주로 사용)게임의 구조(라이브러리 기반)충돌 처리 - 화면에 그려지는 플레이어 기체보다 작은 충돌체, 그리고 추천하는 충돌체(..
[4장] 첫 번째 멀티플레이어 환경 설정
·
책 정리
C++ 헤더 프리뷰블루프린트 클래스가 마치 C++로 작성된 것처럼 검사 결과를 볼 수 있다.C++ 헤더 프리뷰 사용법 : 메인 메뉴에서 Tools → C++ 헤더 프리뷰 클릭 → 원하는 클래스 선택언리얼에서의 세 가지 주요 클래스UObject : 언리얼 엔진의 기본 클래스주요 기능가비지 컬렉션(GC, Garbage Collection)네트워킹 지원프로퍼티 및 멤버 함수의 리플렉션AActor : 에디터 또는 런타임 중에 게임 레벨에 추가할 수 있는 UObject런타임 중에 추가될 때는 액터가 스폰됐다고 표현한다.AActor는 멀티플레이어 환경에서 네트워킹 중에 복제될 수 있는 기본 타입동기화가 필요한 모든 컴포넌트의 정보를 제공한다.UActorComponent : 액터 또는 액터 자체에 속하는 다른 컴포넌..
250501 TIL - C++에서 깊은 복사와 얕은 복사의 차이, Unreal Engine 5에서의 Cast<T>()의 내부 구현 분석
·
TIL(Today I Learned)
1. C++에서 깊은 복사와 얕은 복사의 차이얕은 복사는 말 그대로 값만을 복사하는 방식이고 깊은 복사는 객체가 가리키는 실제 데이터까지 독립된 객체를 생성하는 방식입니다.얕은 복사는 C++의 기본 복사 생성자, 대입 연산자를 사용하면 일어납니다.깊은 복사는 사용자 정의 복사 생성자와 대입 연산자를 통해 구현해야 합니다.얕은 복사의 경우 포인터나 참조 형태의 멤버 변수가 존재하면 메모리 주소만 복사됩니다.따라서, 원본과 복사본 중 하나가 가리키는 메모리를 변경하면 다른 쪽에도 영향을 주며, 소멸자에서도 두 객체가 동일한 메모리를 해제하려고 할 때 댕글링 포인터와 같은 문제가 발생할 수 있습니다.깊은 복사의 경우 동적 할당된 자원을 관리하는 객체에는 필수적입니다.저 같은 경우는 자체 엔진으로 던그리드를 개..