본문 바로가기

전체 글

(845)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-16 범위 지정 연산자 현재 작성했던 의사코드 중에서 앞으로 이동하는 부분만 구현한 상태이다. 이제 뒤로 가는 것을 구현하게 된다. 우선 뒤로 가기 위해서 얼마나 이동했는 지 알 필요가 있으며, 이를 위해 필요한 것은 다음과 같다. 플랫폼 시작 위치 플랫폼이 이동한 거리 우선 시작 위치는 언리얼 상에서 굳이 알 필요가 없다. 따라서 UPROPERTY를 작성하지 않고 선언만 해주었다. 그리고 플랫폼이 이동한 거리는 언리얼 상에서 편집할 필요가 없다. 따라서 UPROPERTY(VisibleAnywhere)로 설정함으로써 보이게만 설정해준다. 그리고 해당 거리는 업데이트 된 것을 체크하기 위해 기본 값을 -1로 초기화해주었다. 그럼 이제 시작 위치를 얻을 차례이다. 시작 위치는 당연하게도 맨 처음 플레이를 했을 때..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-15 속도와 델타타임(DeltaTime) 기존에는 속도를 직접 1을 더해주었지만, 속도 전용 변수를 만들어서 적용해준다. 이 과정에서 델타타임이라는 것을 이용해 이동 프레임률을 독립적으로 만드는 방법 또한 알아본다. 기존에는 직접 X 값에 대해서 1을 더하여 하나의 벡터에만 값을 더해주었다. 하지만 벡터에 다른 벡터를 추가할 수 있음을 이제 알기 때문에, 이를 이용하여 새롭게 벡터를 추가해준다. 초기화 값은 (100, 0, 0)으로 설정하였고, 추가로 Category라는 것을 생성하였다. EditAnywhere 옆에 있는 것을 볼 수 있는데, 말그대로 다음과 같은 ("Moving Platform") 카테고리를 생성한다는 것이다. 언리얼에 가서 Moving Plaftform을 보면, 디테일 패널에 위와 같이 M..
[백준 9024번] 두 수의 합 (C++) 문제링크 : https://www.acmicpc.net/problem/9024 9024번: 두 수의 합 프로그램은 표준입력으로 입력을 받는다. 프로그램 입력은 t 개의 테스트 케이스로 구성된다. 입력의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다. 두 번째 줄부터 두 줄 www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = 987654321; int T, N, K, arr[1000001]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> T; while(T--) { cin >> N >> K; ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-14 함수 반환 값 이번에는 저번에 작성했던 의사코드를 구현을 하게 된다. 기존에 작성했던 코드를 지우고 함수 반환 값을 이용하여 구현을 시도 한다. 함수 반환 값을 이해하기 전에 잠깐 다음 두 가지 용어에 대한 개념을 이해할 필요가 있다. 첫 번째는 표현식(Expression)으로 값을 생성하는 코드 조각에 해당한다. 다음으로 문(Statement)으로 수행되어야할 동작을 의미한다. 이 두 가지는 관련되어있으며, 거의 항상 표현식은 동작을 실행시켜야할 때 코드 조각의 값을 계산하기 위해 포함된다. 하지만 반대로 문은 통해 값이 나타나지는 않는다. 다음 표현식의 예시를 살펴보자. MyVector LocalVector.Z + 100 GetActorLocation() C++에서 MyVector를 입력하면 해당 변..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-13 의사코드 VScode 코딩하는 화면을 보다보면, 함수위에 //와 함께 초록색으로 적힌 텍스트를 볼 수 있다. 해당 코멘트는 주석이라고 하며, 컴파일러에서 무시하는 코드이다. // 뒤에 작성하는 내용은 주석처리되며, 초록색으로 작성되는 것을 볼 수 있다. 이러한 주석을 이용하여 앞으로 어떠한 것을 구현하려는지 참조할 수 있는 의사 코드를 작성할 수 있다. 현재 움직이는 플랫폼은 오른쪽으로 밖에 움직이지 않는다. 우리는 앞으로 앞뒤로 움직이는 플랫폼을 만들 예정이다. 이를 의사 코드를 이용해 어떻게 구현할지 미리 다음과 같이 작성해볼 수 있다.
[백준 3020번] 개똥벌레 (C++) 문제링크 : https://www.acmicpc.net/problem/3020 3020번: 개똥벌레 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = 987654321; int N, H, arr1[200001], arr2[200001]; int result = MAX, result_cnt; int main() { ios_base::sync_with_stdio(0); cin.tie(0)..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-12 로컬 변수 (지역 변수) 우리가 여태 사용해온 변수들은 클래스 변수이다. 클클래스 변수는 클래스의 인스턴스가 있는 한 유지된다. 변수가 유지되는 기간을 스코프라 하며, 클래스의 인스턴스만큼 유지되는 것 이외에도 함수만큼 유지되는 경우도 있다. 로컬 변수는 후자에 해당하게 된다. 로컬 변수는 함수 내에서만 존재하고, 함수를 호출할 때 마다 초기화가 된다. 먼저 다음과 같이 값을 할당해보았다. 기존의 MyVector의 경우 매 프레임마다 Y 값을 계속 더해줌으로써 우측으로 이동했지만, LocalVector의 경우 매 프레임마다 Z 값을 계속 더해줘도 위로 이동하지 않는다. 매 프레임마다 (1, 2, 3)의 위치로 초기화를 진행하고 Z 값을 1을 더해주는 것이기 때문에, Z 값을 더해준다 한들 다시 (1, 2..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-11 Tick 움직이는 플랫폼을 위해서는 Tick 함수를 알아야 한다. Tick 함수를 이해하기 위해서는 대부분의 게임 엔진을 구축하는 게임 루프 과정을 우선 알 필요가 있다. 1. 게임 엔진이 플레이어의 인풋을 가져옴 (스페이스바, 마우스 버튼 등) 2. 위 정보를 이용해 게임 상태를 업데이트 (플레이어 이동, 공 튀어오름 등) 3. 게임 엔진에서 게임 상태를 가져와 화면에 렌더링 렌더링을 통해 일련의 숫자들이 화면에 표시될 이미지로 바뀌며, 이러한 이미지가 프레임이다. 동영상을 구성하는 그림 중에서 그림 하나가 프레임이라고 생각하면 된다. 이러한 프레임을 초당 얼마나 많이 나타낼 수 있는가를 프레임률(FPS)이라고 한다. 컴퓨터가 1초당 통과할 수 있는 게임 루프의 수이자, 인풋을 처리하고 상태를 업데이트..