본문 바로가기

전체 글

(842)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-7 인스턴스 대 디폴트 우리가 VScdoe를 통해 작성한 것을 언리얼로 노출시키는 데에는 UPROPERTY()가 필요하다. 괄호 안에 추가적으로 EditAnywhere, VisibleAnywhere 등을 작성해줄 수 있다. 해당 내용을 작성해주기에 앞서 블루프린트 패널과 인스턴스 패널 어디에 값을 노출시켜주는지 알 필요가 있다. 먼저 우리가 만든 BP_PawnTank의 디테일 패널을 보면 기본적인 디폴트 블루프린트가 존재한다. 여기에는 해당 블루프린트에 대한 모든 기본적인 정보가 담겨있다. 해당 BP_PawnTank를 뷰포트로 드래그하면, 인스턴스가 된다. 우리가 작성하고자 하는 VisibleAnywhre는 디폴트와 인스턴스 둘 다 노출된다. 하지만 VisibleInstanceOnly는 이름 그대로 디폴트에..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-6 블루프린트 클래스 파생 우리가 만든 BasePawn을 기반으로, 탱크와 터렛을 위한 블루프린트 클래스를 만들어보자. 이를 위해 따로 블루프린트의 폰용 폴더를 만들어서 해당 위치에 저장하도록 해주었다. 이제 좌측 상단의 컴포넌트를 보면 우리가 만들었던 컴포넌트들이 전부 존재하는 것을 볼 수 있다. 하지만 해당 컴포넌트들을 눌러보면 우측에 디테일 창에 아무것도 뜨지 않는 것을 볼 수 있다. 해당 컴포넌트에 대한 프로퍼티는 C++ 에서 지정해야하기 때문에 언리얼 디테일 창에서는 아무것도 뜨지 않는다. 따라서 캡슐 컴포넌트를 가져오고 크기를 조정하거나, 우리가 원하는 메시를 스태틱 메시 컴포넌트에 할당하기 위해서는 프로퍼티를 노출시켜주어야 한다. 이는 다음 강의에서 이어서 진행된다.
[백준 19621번] 회의실 배정 2 (C++) 문제링크 : https://www.acmicpc.net/problem/19621 19621번: 회의실 배정 2서준이는 아빠로부터 N개의 회의와 하나의 회의실을 선물로 받았다. 각 회의는 시작 시간, 끝나는 시간, 회의 인원이 주어지고 한 회의실에서 동시에 두 개 이상의 회의가 진행될 수 없다. 단,www.acmicpc.net#include using namespace std;typedef long long ll;typedef pair pii;const int MAX = INT_MAX;int N, s[26], e[26], n[26];int result;void func(int idx, int sum){ if(idx >= N) { result = max(result, sum); ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-5 스태틱 메시 컴포넌트 저번 캡슐 컴포넌트에 이어서 스태틱 메시 컴포넌트를 생성할 차례이다. 큰 틀은 저번 강의와 거의 동일하다. 탱크를 위한 베이스와 터렛 부분 2가지를 생성하게 된다. 스태틱 메시 컴포넌트의 경우 클래스 전방 선언이 필요없다. 스태틱 메시 컴포넌트는 기본적으로 모든 액터에 포함되는데, 우리가 사용하고 있는 폰은 액터에서 상속된 클래스이기 때문이다. 헤더 오류 방지를 위해 그냥 클래스 전방 선언을 선언해버리는 것도 하나의 방법이기는 하다. 이번 경우는 이미 포함되어있는데 클래스 전방 선언을 해버리는 것이라 중복되는 케이스이나, 언리얼 엔진 타입의 파일에는 여러 번 포함되지 않도록 하는 보호 장치가 존재하여 상관은 없다. 헤더 파일 보다 위에 존재하는 #pragma once가 그 보호 장치..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-4 캡슐 생성 캡슐 컴포넌트를 직접 생성해볼차례이다. CreateDefaultSubobject()라는 템플릿 함수를 통해서 생성하게 된다. 템플릿 함수이므로 우리가 원하는 컴포넌트인 UCapsuleComponent를 안에 넣어주게 되고, 이름은 () 안에 넣어준다. 또한 해당 함수는 생성자에서만 실행 가능한 함수이다. 안에 UCapsuleComponent를 넣음으로서 우리는 UCapsuleComponent를 사용하게 된다. 따라서 전방 선언만 했던 저번 강의와 달리, 이번엔 해당 헤더 파일을 선언해줄 필요가 생긴다. 그리고 CreateDefaultSubobject는 새로 생성된 컴포넌트의 주소를 반환하며, 우리가 미리 선언했던 UCapsuleComponent 포인터에 저장하게 된다. 이제 캡슐 컴포넌트를 루..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-3 전방 선언 우리는 이제 BasePawn에 캡슐 컴포넌트, 스태틱 메시 컴포넌트 등이 필요한 것을 알고 있다. 이제 VScode에서 간단하게 캡슐 컴포넌트를 선언해보자. 현재 컴파일러가 UCapsuleComponent가 무엇인지 모르므로, 헤더파일을 선언해주어야 한다. 해당 내용은 "Components/CapsuleComponent.h"에 들어있다. 위 헤더파일을 선언해주면 간단하게 해결된다. 하지만 우리는 UCapsuleComponent 타입을 선언하는 것만 원하는 것이지, 해당 헤더파일에 있는 다른 기능들을 원하는 것이 아니다. 헤더를 선언하면 헤더에 속한 모든 내용을 가져오게 되므로, 파일의 용량이 커지게 된다. 이를 방지하기 위해 사용하는 것이 전방 선언이다. 전방 선언은 새 포인터를 선언할 때 사..
[백준 1059번] 좋은 구간 (C++) 문제링크 : https://www.acmicpc.net/problem/1059 1059번: 좋은 구간 [9, 10], [9, 11], [9, 12], [10, 11], [10, 12] www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int L, n, arr[51]; int s, e, cnt; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> L; for(int i=0; i> arr[i]; cin >> n; sort(arr, arr+L); for(int i=0; i
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-2 컴포넌트 생성 이번에는 우리가 생성했던 BasePawn이 필요한 컴포넌트에 대해서 살펴본다. 클래스에 컴포넌트를 추가할 때는 해당 컴포넌트가 어떤 클래스에 속하는지를 결정해야한다. 다음 선택지를 살펴보자. 씬 컴포넌트 - 변형과 같은 속성이 있음 - 트랜스폼, 어태치먼트이 가능 - 시각적 표현이 불가능 캡슐 컴포넌트 - 씬에서 상속 - 충돌을 처리가 가능 스태틱 메시 컴포넌트 - 씬에서 상속 - 시각적 표현이 가능 우선 폰 클래스의 기본 컴포넌트로 루트 컴포넌트가 존재한다. VScode에서 루트컴포넌트를 작성하고 정의로 찾아가보면, 액터에 속해있으며 씬 컴포넌트로 되어있는 것을 볼 수 있다. 따라서 루트 컴포넌트를 캡슐컴포넌트로 재할당해줌으로서 충돌 처리를 해주고, 쓰태틱 메시 컴포넌트를 붙여줌으로서 메..