
UPROPERTY 변수 레벨 블루 프린트에서 변수를 만들었던 것을 기억할 것이다. 이번엔 VScode에서 C++ 변수를 생성해준다. 순서대로 타입, 변수명을 적고 이후에 원하는 값을 할당해주면 된다. 여기서 주의해야 할 것은 그냥 변수만 선언하면 VScode상에서만 수정이 가능한 코드이다. 만약 해당 변수를 레벨 블루 프린트때와 같이 언리얼에서도 사용하고 싶다면 변수 작성하기 전에 UPROPERTY를 선언해주어야 한다. 그리고 바로 다음에 오는 괄호에는 EditAnywhere을 적어주었는데, 이는 어디에서나 편집가능하도록 선언해준 것이다. 이후에 빌드를 해주는데, 언리얼 상에는 라이브코딩이라는 기능이 존재한다. 우측 하단에 위 빨간 박스로 체크한 이미지를 누르면 즉석에서 VScode를 통해 적었던 C++..
문제링크 : https://www.acmicpc.net/problem/2776 2776번: 암기왕 연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = 987654321; int T, N, M; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> T >> N; while(T--) { cin >> N; mapm; while(N--)..

C++ 프로젝트 컴파일링하기 이번에는 드디어 설치한 에디터를 통해 C++ 클래스를 생성하고 컴파일하는 과정을 직접 해보게 된다. 우선 언리얼에는 기본 에디터가 우리가 사용할 비주얼 스튜디오 코드(이하 VScode)가 아닌 비주얼 스튜디오로 되어있다. 따라서 이를 바꿔주는 작업이 필요하다. 위와 같이 편집 -> 에디터 개인설정을 들어가면 좌측에 소스코드 칸이 있다. 해당 칸에서 소스 코드 에디터를 전환하는 것이 가능하다. 전환후에는 언리얼을 재시작하는 것이 필요하다. 이제 C++ 클래스를 생성할 차례이다. 상단 툴에서 새로운 C++ 클래스를 선택하여 생성이 가능하다. 우리가 만들고자하는 것은 움직이는 플랫폼이기에 액터를 선택하여 만들어준다. 생성 과정에서 위와 같은 메시지가 뜨는 것을 볼 수 있다. 여기서..

VScode 설치하기 저번 비주얼 스튜디오를 설치한데에 이어 이번엔 비주얼 스튜디오 코드를 설치할 차례이다. 이번엔 저번보다 더욱 간단하다. 우선 해당 사이트에 들어가 바로 보이는 다운로드 버튼을 눌러준다. 사이트 링크 : https://code.visualstudio.com/ Visual Studio Code - Code Editing. Redefined Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux,..

PC - 비주얼 스튜디오 설치 이번 게시물은 앞서 언급했던 비주얼 스튜디오에 대해 설치에 대해 간단히 다룬다. 이미 예전에 설치를 해놨었기 때문에, 강의에서 나온 화면을 캡처하여 정리하였다 우선 언리얼 엔진 버전을 지원하는 비주얼 스튜디오 버전을 체크해줄 필요가 있다. 이는 언리얼 공식 문서 페이지에서 확인이 가능하지만, 언리얼 5에 대한 업데이트는 아직까지 이루어지지 않았다. 따라서 강의에서 설명해준대로 VS 2022 버전을 다운로드해주면 된다. 개인 사용자용 무료판은 Visual Studio Community이다. 따라서 해당 설치 파일을 다운받아주면 된다. 사이트링크 : https://visualstudio.microsoft.com/downloads/ Download Visual Studio Too..

컴파일러와 에디터 이번 섹션에서 C++를 활용해 언리얼에서 작업을 하기 위해 컴파일러와 에디터에 대해 알아야한다. 우선 컴파일러가 왜 필요한지 알려면 소스코드에 대해서 먼저 알아야 한다. 소스코드란 우리가 쓰는 코드이며 C++과 같이 보통은 텍스트로 이루어져 있다. 따라서 읽는 주체가 사람이며, 사람이 읽을 수 있는 방식으로 게임에서 하려는 것이나 컴퓨터로 하려는 것을 설명하는 방식이다. 소스코드는 읽는 주체가 사람이기 때문에 기계가 무언가를 실행하고 구동하는데 활용되지는 않는다. 이는 바이너리 실행 파일의 역할이다. 바이너리 실행 파일은 0과 1로 구성된 바이너리 코드이며, 기계가 빠르게 읽고 CPU와 GPU에서 실행되도록 만들어져 있다. 소스코드와 바이너리 실행 파일 사이에는 간극이 존재하며, 이 간..
문제링크 : https://www.acmicpc.net/problem/1590 1590번: 캠프가는 영식 예제 1의 경우 150분, 200분, 250분, ..., 600분에 한 대씩 버스가 출발한다. 따라서 영식이는 300분에 버스를 타면 된다. www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = 987654321; int N, T, a, b, c, result = -1; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> T; int minV = 1000000; for(int i=1; i> a >> b >>..

캐릭터 커스터마이징 캐릭터를 커스터마이징 하기 위해 우선 캐릭터 클래스를 생성해준다. 그리고 일단 실행을 해보면. 우리가 배치하면 3인칭 캐릭터가 아닌 자체 캐릭터가 나오는 것을 알 수 있다. 이는 플레이어 스타트가 존재하기 때문이기에 이를 지워준다. 하지만 아직도 부족하며, 3인칭 캐릭터가 우리가 사용할 것이란걸 알려주는 작업이 필요하다. 3인칭 캐릭터의 블루프린트 클래스로 가보면 디테일 탭에 플레이어 자동 빙의 칸이 존재한다. 해당 칸은 기본으로 비활성화되어있으며, 이를 Player 0으로 활성화를 해주면 해당 캐릭터가 최우선으로 빙의되게 된다. 이제 실행해보면 3인칭 캐릭터가 제대로 나오는 것을 볼 수 있다. 하지만 이상한 점이 있는데, 팔 부분 메시가 어긋난 것이랑 좌우로 회전이 안되는 것이다. ..

섹션 개요 - 장애물 공격 이번 섹션의 목표는 여러가지 장애물이 배치되어 있는 코스를 만들고 이를 통과하는 것이다. 장애물에는 위아래로 움직이는 플랫폼, 좌우로 움직이는 플랫폼, 빙글빙글 도는 플랫폼, 회전하는 벽 등이 있다. 이를 위한 에셋들을 가져오고, 이번 섹션부터 C++를 통해 다루기에 C++에 필요한 툴을 설치해준다. 그리고 에디터에서 이를 실행하기 위해 C++를 컴파일 하는 방법을 습득한다. 이에 더하여 C++의 기본 문법과 C++에서 액터를 생성하는 방법 등을 습득하고 블루프린트에 연결하는 방법 또한 습득하게 된다. 프로젝트 셋업 실질적인 첫 시작인 프로젝트 셋업이다. 이번 섹션을 위한 에셋 팩이 존재하여 이를 몇 가지 가져와 프로젝트를 생성하게 된다. 추가적으로 이번엔 3인칭 캐릭터를 생성..
문제링크 : https://www.acmicpc.net/problem/11687 11687번: 팩토리얼 0의 개수 첫째 줄에 M (1 ≤ M ≤ 100,000,000)이 주어진다. www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = 987654321; int M; int func(int n) //n!에서 5의 갯수 카운팅 { int cnt = 0; while(n>=5) { n/=5; cnt+=n; } return cnt; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> M; int l = 1, r = 10000..
Section 2 마무리 및 요약 이번 섹션을 통해 블루프린트, 프로그래밍, 언리얼, 객체지향 등에 대해 다음과 같이 기본적인 것들을 다뤘다. 블루프린트 : 노드, 핀 프로그래밍 : 변수, 문자열, 참조, 분기 언리얼 : 맵, 액터, 컴포넌트, 트랜스폼, 백터 객체지향 : 오브젝트/구조체, 클래스, 멤버 함수, Self 우리가 이번 Section에서 배운 모든 것은 C++로의 변환이 가능하며, 이번 Section에서는 블루 프린트를 위주로 다뤘지만 다음 Section에서는 C++에서 다루게 된다. 해당 Section은 블로그에 정리하면서 쓰기 위해 2번째 듣는 강의이다. 처음에는 이미 한 번 다 봤던 내용이니 빠르게 진도를 나갈 수 있다고 생각했지만, 처음에 듣기만 하고 따로 정리를 안해서인지 순간순간 ..

레벨 노드와 지연 노드 현재 만든 게임은 탄약을 모두 소모하면 총알이 없다는 것을 알려주고 더이상 할 수 있는 것이 없다. 이대로 두는 것은 의미가 없기에, 현재 레벨을 처음부터 다시 실행시킬 필요가 있다. 먼저 레벨을 열여야 한다. 이는 우클릭 후 Open Level을 검색해보면, Open Level (by name)과 Open Level (by object reference) 이렇게 2가지가 보이는 것을 알 수 있다. 우리는 여기서 Open Level (by name)을 선택해주었다. 함수 이름에서 알 수 있듯이 이름을 통해서 레벨을 연다는 것을 알 수 있다. 그렇다면 이름을 어떻게 알 수 있을까? 바로 Get Current Level Name 함수를 통해 쉽게 얻는 것이 가능하다. 그렇다면 레벨이 ..

멤버 함수 기존의 Spawn Projectile 함수를 보면 탄약을 스폰한 이후 해당 탄약의 전방 벡터를 얻고, 4000을 곱해 충격량량을 추가해주는 부분은 모두 BP_Projectile 인스턴스를 사용한다. 따라서 이 모두를 BP_Proejectile 클래스로 옮겨 데이터를 다루는 코드가 데이터 자체와 같이 살 수 있게 만들고자 한다. 함수가 조작하는 데이터와 함께 사는 것 이것은 객체 지향 프로그래밍의 핵심이기도하다. 이를 위해 BP_Projectile에 직접 함수를 추가해준다. 이렇게 추가한 함수를 멤버 함수라고 하며, 멤버 함수는 클래스의 함수로 항상 특정 인스턴스에서 호출되는 함수이다. 위는 테스트 삼아 BP_Projectile 클래스에 멤버 함수 Print Your Name을 추가해준 상태이다..
문제링크 : https://www.acmicpc.net/problem/11663 11663번: 선분 위의 점 첫째 줄에 점의 개수 N과 선분의 개수 M이 주어진다. (1 ≤ N, M ≤ 100,000) 둘째 줄에는 점의 좌표가 주어진다. 두 점이 같은 좌표를 가지는 경우는 없다. 셋째 줄부터 M개의 줄에는 선분의 시작점과 www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = 987654321; int N, M, arr[100001]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> M; for(int i=0..

순수 함수 직전 강의를 통해 만들었던 Has Ammo 함수의 경우 다소 이상하다고 여길 만한 점이 있다. 그것은 바로 해당 함수에 실행핀이 굳이 필요한가? 이다. 그렇다면 함수에서 실행핀을 없앨 수 있을까? 또 실행핀이 필요한 함수와 그렇지 않은 함수는 어떤 경우가 있을까? 그에 관련해서 우선 사이드 이펙트라는 것을 알아야 한다. 사이드 이펙트란 함수가 실행되고 식별 가능한 효과가 생기는 것을 의미한다. 다음 함수들의 예시를 살펴보자. Print string -> 문자열이 보임 Add Impulse -> 충격이 가해지며 이러한 현상이 눈에 보임 Set Ammo -> 변수의 설정 값이 바뀜 이렇게 문자열이 보이거나, 충격이 가해지거나, 변수의 설정 값이 바뀌는 것 이것들은 함수가 실행된 후에 생기는 현상들..