본문 바로가기

Unreal/Udemy 강의

(308)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-22 출력 로그에 기록하기 여태까지 강의를 진행하면서 오류가 발생하거나, 계산한 값들이 의도한바에 맞게 출력하는지 직접 체크하고 싶을 수 있다. 이런 게임 디버깅 체크용으로 출력 로그에 기록하는 방법을 사용할 수 있다. 만약 확장 프로그램인 Unreal Engine 4 Snippets를 설치했다면 Vscode에서 ulog만 쳐도 자동으로 아래와 같은 코드가 입력된다. 다음 코드를 보면 인수를 3개 받는데, 차례대로 로그 카테고리, 얼마나 시급한지를 나타내는 로그 수준, 출력 메시지이다. 이제 컴파일하고 언리얼로 돌아가 하단의 출력 로그를 살펴보자. 보면 우리가 작성한 로그가 5개가 출력된 것을 볼 수 있다. 이는 현재 MovingPlatform2.cpp에 대해 메시지를 표기하는 것인데, 해당 cpp에 대한 액..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-21 GameMode 뷰포트에서 우클릭을 하면 여기에서 플레이라는 기능을 통하여 원하는 곳에서 플레이어를 스폰할 수 있다. 하지만 현 상태에서 게임 플레이를 누르면 캐릭터가 있는 위치에서만 플레이가 가능하다. 이는 언리얼에서는 우리가 어떤 캐릭터를 사용하고자 하는지 모르기 때문에 발생하는 문제이다. 이를 위해 게임모드 클래스를 사용하게 된다. 게임모드란 기본적으로 레벨에 들어가서 게임 규칙을 관리하는 액터이다. 누가 어디에 스폰해야 하는지, 플레이어에게 어떤 클래스를 아용하는지, 그 밖에 게임 작동 방식을 의미한다. 간단히 말해 특정 게임 또는 특정 경기의 규칙과 같다. 게임모드는 좌측 상단에서 설정할 수 있다. 프로젝트 세팅에 있는 GameMode 항목은 프로젝트 전체에 대한 설정으로 프로젝트에서 생성한 모..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-20 캐릭터 충돌 강제 적용 앞뒤로 움직이는 플랫폼에 이어서, 이번엔 좌우로 움직이며 부딪힐 시 캐릭터가 밀리는 푸셔 플랫폼을 생성해준다. 이제 실행을 해보고 푸셔 옆에 서있으면 부딪힐 때 버그가 일어나는 것을 볼 수 있다. 만약 그냥 서있지 않고, 점프나 이동 중에 부딪히면 버그가 일어나지 않고 자연스럽게 밀리는 것 또한 볼 수 있다 이는 캐릭터 코드가 움직이지 않는 한 콜리전을 확인하지 않기 때문에 발생하는 현상이다. 이를 위해 캐릭터 블루프린트 클래스로 이동하여, 매틱 마다 해당 캐릭터가 왼쪽으로 살짝 이동했다가 다시 오른쪽으로 이동하도록 설정해준다. 이는 캐릭터 무브먼트 이벤트 그래프에서 MoveUpdateComponent라는 함수를 통해 할 수 있다. Z 값은 필요없으니 X와 Y에 대해 1씩 값을 주..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-19 블루프린트 하위 클래스 움직이는 플랫폼을 매번 다시 생성하는 것은 번거로우니, 우리가 만들었던 C++ 클래스를 바탕으로 블루 프린트 클래스를 생성해준다. 그리고 큐브 모습 그대로면 다소 식상하니, 우리가 다운받았던 에셋에서 골라 적용해주었다. 해당 석면 발판을 기존에는 앞뒤로 움직이게 했지만, 위아래로 움직이게 변경을 해주었다. 기능은 이미 구현을 했기에 언리얼에서도 편집가능하게 했던 PlatformVecloity의 Z 값만 변경해주면 간단히 할 수 있다. 해당 석면 발판으로 끝이 아니라, 석면 발판에 에셋을 추가하여 돌기둥 모습을 만들어주었다. SM_Kit_Wall 메시를 이용하여 발판 아래에 4면으로 붙여주고, 해당 형태를 3단으로 복사해주었다. 이제 해당 블루프린트 클래스를 뷰포트에 드래그하고 실행..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-18 멤버 함수 사용 현재 무사히 앞 뒤로 움직이는 것까지 완료한 상태이다. 하지만 속도 값을 1000으로 변경 후 다시 실행해보면 여전히 시작점을 지나치며 움직이는 현상이 발생할 수 있다. 현재 if문은 끝 지점을 지나쳐야만 하는데, 이때 지나치는 정도가 델타타임에 따라 다르게 되기 때문이다. 델타타임은 속도에 영향을 받기 때문에, 속도가 빠를수록 심해지고, 시간이 지날수록 거리에 오차가 점점 심해질 수 있다. 이를 개선하기 위해서는 원래 시작 위치에서 목표로 한 위치로 가려면 얼마나 이동해야 하는지 미리 계산을 해주는 것이다. 먼저 속도는 화살표로 나타낼 수 있고 방향과 크기를 갖는다. 설정한 만큼만 이동하고 멈추는 정확한 위치를 알 기 위해서는 위 속도 화살표의 방향을 알아야한다. 이 화살표의 방향을 벡..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-17 If 문장 저번에 얼마나 갔는지 체크를 했으니 이제 너무 멀리가면 반대방향으로 갈 차례이다. 블루프린트에서는 브랜치 문을 통해 할 수 있으며, C++에서는 If문에 해당한다. 우선 얼마나 멀리가면 반대방향으로 갈지 기준으로 잡을 거리를 100으로 초기화해주었다. 이제 기존의 얼마나 움직였는지를 체크하는 DistanceMoved 변수를 이용하여 if 문을 작성해준다. 이때 DistacneMoved를 지역변수로 바꾸고, 헤더파일에서 선언했던 것을 지워주었다. 만약 움직인 거리가 기준 거리 100을 넘기면 속력에 음수를 붙혀 반대방향으로 향하도록 해준다. 이 상태에서 컴파일을 하고 실행해보면, 앞뒤로 움직이는 모습을 볼 수 있다. 하지만 문제점이 있는데, 그것은 현재 플랫폼이 시작점을 조금 지나치며 움직인다는..
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..