본문 바로가기

Unreal/Udemy 강의

(308)
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 코딩하는 화면을 보다보면, 함수위에 //와 함께 초록색으로 적힌 텍스트를 볼 수 있다. 해당 코멘트는 주석이라고 하며, 컴파일러에서 무시하는 코드이다. // 뒤에 작성하는 내용은 주석처리되며, 초록색으로 작성되는 것을 볼 수 있다. 이러한 주석을 이용하여 앞으로 어떠한 것을 구현하려는지 참조할 수 있는 의사 코드를 작성할 수 있다. 현재 움직이는 플랫폼은 오른쪽으로 밖에 움직이지 않는다. 우리는 앞으로 앞뒤로 움직이는 플랫폼을 만들 예정이다. 이를 의사 코드를 이용해 어떻게 구현할지 미리 다음과 같이 작성해볼 수 있다.
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초당 통과할 수 있는 게임 루프의 수이자, 인풋을 처리하고 상태를 업데이트..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-10 C++에서 함수 호출하기 저번에는 구조체를 사용해 위치를 직접 할당해줬지만, 이번에는 함수를 호출하여 위치를 지정해준다. 블루 프린트에서 SetActorLocation이라는 함수를 사용했던 것을 기억할 것이다. C++에서도 같은 함수를 사용하며, 인수라고 불리는 인풋을 받는다. FVector로 할당했던 1, 2, 3을 생성자를 통해 직접 할당해줄 수 있다. 컴파일 후 언리얼로 돌아가서 확인을 해보는데, 현재 MovingPlatform2 액터에는 컴포넌트가 존재하지 않는다. 따라서 사실상 위치를 가질 수 없는 상태이다. 이를 위해 컴포넌트로 큐브를 추가해주었다. 우리는 FVector(1, 2, 3)의 값을 FVector 타입 변수인 MyVector에 저장했었다. 따라서 SetActorLocation에 FV..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-9 C++에서 구조체 사용하기 전 강의를 통해 간단한 변수를 사용해보았지만 벡터나 트랜스폼 같이 더 복잡한 유형은 어떻게 해야할까? 과정은 변수를 선언할 때와 거의 동일하다. 마찬가지로 언리얼에 노출시키기 위해 UPROPERTY(EditAnywhere)를 작성해주고, 이번에는 FVector 타입을 선언한다. 블루프린트에서 다뤘던 벡터를 이렇게 다루는데, 여기서 맨앞에 작성한 F는 구조체를 뜻한다. 앞서 MovingPlatform2에 A를 붙여 액터를 나타낸 것과 같은 방식이다. 값을 할당할 때에는 기존 변수 때와는 달리, 새 구조체나 클래스 값을 만드는 생성자가 필요하다. 생성자는 항상 데이터 타입과 이름이 같으며, 테스트로 X, Y, Z에 대해 각각 1, 2, 3을 할당해보았다. 이렇게 만든 값을 다른 값..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-8 C++ 파일 및 BeginPlay 저번 강의를 통해 C++ 변수를 선언해주었지만, 아직 기능을 실행하는 방법은 모른다. 이번엔 간단한 기능을 테스트해보게 된다. 블루프린트에서 BeginPlay를 기억할 것이다. Vscode에서 cpp 파일을 보면 마찬가지로 BeginPlay 항목이 존재한다. 블루 프린트 때와 마찬가지로 실행시에 해당 항목을 적용한다는 것이다. 우선 간단하게 전에 만들었던 MyInt의 값을 게임 플레이 시에 9로 바뀌도록 해보자. 단순히 MyInt에 9를 할당해주면 된다. 이제 언리얼로 돌아가 플레이를 누르면 MyInt의 값이 9로 바뀌어있다. 이번엔 할당이 아니라 간단한 덧셈을 테스트해보자. 이를 위해 입력받는 값 A, B와 결과값 APlusB를 선언해주었다. 이를 cpp 파일에서 단순..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-7 UPROPERTY 변수 레벨 블루 프린트에서 변수를 만들었던 것을 기억할 것이다. 이번엔 VScode에서 C++ 변수를 생성해준다. 순서대로 타입, 변수명을 적고 이후에 원하는 값을 할당해주면 된다. 여기서 주의해야 할 것은 그냥 변수만 선언하면 VScode상에서만 수정이 가능한 코드이다. 만약 해당 변수를 레벨 블루 프린트때와 같이 언리얼에서도 사용하고 싶다면 변수 작성하기 전에 UPROPERTY를 선언해주어야 한다. 그리고 바로 다음에 오는 괄호에는 EditAnywhere을 적어주었는데, 이는 어디에서나 편집가능하도록 선언해준 것이다. 이후에 빌드를 해주는데, 언리얼 상에는 라이브코딩이라는 기능이 존재한다. 우측 하단에 위 빨간 박스로 체크한 이미지를 누르면 즉석에서 VScode를 통해 적었던 C++..