
런타임에 액터 스포닝하기(spawning)저번에 만든 총을 이제 캐릭터에 연동할 차례이다.이를 위해 우선 런타임 동안에 소총을 스포닝하는 방법을 알아보자. 액터 스폰에 대해서는 UWorld에 속한 SpawnActor 함수를 통해 스폰하게 된다.총은 게임이 시작되자마자 캐릭터가 가지고 있어야 하므로 BeginPlay에서 해당 함수를 작성하게 된다.해당 함수는 템플릿 함수이므로 우리가 사용할 총의 타입인 AGun을 넣어준다.다음으로 인수를 받는데, 인수는 클래스로 받는 것이 가능하다. (UClass 타입) 기본적으로 우리는 C++에서 스폰 작업을 하지만, 여기서 해당 Gun의 블루프린트 하위를 스폰하게 된다.이를 위해 블루프린트에 후킹할 방법을 알아야한다.C++에서 직접 후킹하는 것은 어려우므로 다른 방법을..

건(Gun) 액터해당 게임은 총을 사용한 슈터 게임이다.따라서 캐릭터는 총을 가지게 되므로 이번 강의에서는 총 액터를 생성해주는 작업을 해본다. 기존 캐릭터를 보면 총이 이미 존재하지만, 기본적으로 슈터 장르의 게임에서는 여러 총을 사용하기 위해 총이 교체 가능해야 한다.따라서 따로 총 액터를 생성하고, 이를 캐릭터의 하위로 할당하여 사용하게 된다.먼저 총을 생성하는데 총은 캐릭터나 폰의 기능이 필요없으므로 단순 Actor 클래스로 생성하게 된다. 그리고 해당 클래스에 대한 블루프린트도 미리 만들어두자. 다음으로 해당 총의 루트가 될 SceneComponent와 이에 어태치하여 사용할 Mesh를 선언해주자.이때 Mesh는 총이 어떤 이유에서인지 스켈레톤 메시로 작성되어있기 때문에 스켈레톤 메시로 선언해주..

애니메이션 속도 계산하기현재 애니메이션의 속도와 캐릭터의 속도가 같지 않아서 마치 발이 미끄러지는 듯한 현상이 관측되는 것을 볼 수 있다.이를 개선하기 위하여 애니메이션의 속도를 계산해보자.이를 위해 우선 앞으로 달리는 애니메이션 모습을 체크해보자. 우리가 앞으로 달리는 애니메이션에서 체크해야할 것은 발의 움직임이다.발이 지면에 붙은 순간의 시간과 발이 지면에서 떨어진 순간의 시간을 이용하여 해당 움직임의 속도를 구할 수 있다.아래 표시한 마커의 소수점이 해당 시간을 나타낸다. (0.26) 그리고 추가로 속도를 구하기 위해 해당 발 움직임의 위치가 필요하다.우측 상단을 보면 Location을 확인할 수 있는데 로컬 좌표계로 보면 위치가 그대로인 상태에서 회전만 하는 것이기에 위치의 움직임을 구하는 것이 ..

벡터의 역방향 트랜스폼이번엔 애니메이션의 회전을 적용시킬 차례이다.이를 위해서 트랜스폼에 대한 이해도를 높힐 필요가 있다. 먼저 월드 좌표계와 로컬 좌표계가 존재하며, 월드 좌표계는 베이스가 월드의 중앙이고 로컬은 해당 액터가 중심이 된다.따라서 위치는 상대적이게 되며 월드 좌표계를 기준으로 두면 월드의 중심에서 액터가 움직인 것이고, 로컬 좌표계를 기준으로 두면 액터가 중심으로 월드의 베이스 위치가 달라지게 되는 것이다.이러한 것이 글로벌 공간과 로컬 공간 간의 트랜스폼이 된다. 우리가 필요로 하는 것은 현재 플레이어의 각도이므로 로컬 좌표계의 각도가 필요한 것이다.이는 기존의 Get Velocity 함수를 통해 얻은 속도를 이용하여 방향을 얻는 것이 가능하다.해당 속도를 통해 어떤 방향으로 가는지, ..

애니메이션을 게임플레이에 연결하기이제 블렌드 스페이스를 이용하여 만든 애니메이션을 직접 연결해볼 차례이다.이를 위해 애니메이션 블루프린트의 AnimGraph 화면으로 돌아가보자.기존의 내용은 쓸모가 없으니 전부 지우고, Asset Brower에서 블렌드 스페이스를 통해 만든 애니메이션인 BS_Locomotion을 가져올 수 있다. 이제 각도와 스피드에 대한 변수가 필요하다 이를 각각 생성하여 할당해주고, 출력 값도 연결해주자. 캐릭터의 각도와 스피드를 얻어야 하는데, 이는 해당 애니메이션 블루프린트의 Event Graph에서 가능하다.기본으로 있는 Try Get Pawn Owner 함수를 통해 캐릭터를 얻을 수 있고, Event Blueprint Update Animation 함수를 통해 Tick 함수와..

2D 블렌드 스페이스저번 강의에서 Blend 함수를 통해 애니메이션을 블렌딩 해줬지만, 블렌드 스페이스라는 더 좋은 방법이 존재한다.우선 이를 생성해보자. 블렌드 스페이스를 생성할 때도 기본이 될 스켈레톤 메시를 선택해주어야한다. 생성하고 나면 다음과 같은 화면이 존재하며, 뷰포트 바로 아래 공간이 우리가 작업할 공간이다. 우선 해당 공간에 상하좌우 이동을 할당해보자.할당할 애니메이션은 우측 하단의 에셋 브라우저에서 가져오면 된다.할당한 후에는 컨트롤을 누르면 아래와 같이 초록색 X 표가 보이는데, 이를 통해 해당 X가 위치한 곳의 애니메이션이 재생된다.그리고 블렌드 스페이스 내에 좌측 상단 3가지 중 가운데 표시를 누르면 할당한 내용의 이름을 볼 수 있다. 현재 블렌드 스페이스 좌측과 하단에 None으..

애니메이션 블루프린트의 기초저번에 잠깐 다뤘던 애니메이션에 대해서 이번엔 애니메이션 블루프린트를 통해 다뤄보자.이를 위해 우선 애니메이션 블루프린트를 생성해주자.생성시에 우리가 사용할 스켈레톤 메시를 선택해주어야 한다. 그러면 이제 다음과 같은 화면을 볼 수 있다.좌측에는 미리보기와 함수 및 변수 작성 칸이, 중앙에는 이벤트 그래프 칸이, 우측에는 디테일 패널 및 프리뷰 에디터와 에셋 브라우저가 존재한다. 기본적으로 에셋 브라우저에서 원하는 애니메이션을 골라서 Output Pose에 넣고 컴파일을 해주면 해당 애니메이션이 출력된다. 우리는 중앙에서 Animgraph를 통해 여러 변수들을 사용하여 애니메이션들을 블렌딩하게 된다.블렌딩하기 위해 사용하는 함수는 Blend 함수이다.해당 함수는 이유는 모르겠으..

충돌 메시 편집캐릭터 스포닝 포인트의 바로 오른쪽 통로로 가보면 화면이 이상해지는 부분이 존재한다.이는 콜리전에 문제가 있는 것으로 화면을 플레이어 콜리전으로 바꾸면 해당 콜리전을 볼 수 있다. 위 사진의 튀어나온 콜리전을 선택하여 해당 콜리전의 스태틱 메시를 확인해보자. 해당 스태틱 메시에서 단순 콜리전을 선택하여 설정된 콜리전 세팅을 살펴보면 다음과 같이 콜리전에 대한 에셋팩 오류를 볼 수 있다. 이를 고치기 위해서는 모든 콜리전을 삭제하고 다시 할당해주는 방법도 있지만, 간단하게 튀어나온 콜리전만 선택하여 삭제해주면 다른 부분에는 영향없이 깔끔하게 문제있는 부분만 삭제가 가능하다. 이제 다시 원래 화면의 플레이어 콜리전을 살펴보면 전과 같이 이상하게 튀어나온 콜리전이 없는 것을 볼 수 있다.

스켈레탈 애니메이션의 기초현재 캐릭터가 움직일 때 현재 고정된 상태 모양 그대로 움직이기 때문에 매우 부자연스럽다.이를 해결하기 위해 애니메이션을 설정하게 되며, 이번 강의에서는 이 애니메이션의 기초적인 부분을 다루게 된다.이를 위해 다운받았던 에셋팩에서 애니메이션 시퀸스 파일을 찾아 열어보자.열어보면 다음과 같은 화면을 볼 수 있다. 해당 화면을 통해 애니메이션이 동작하는 모습을 볼 수 있고, 우측 하단의 에셋 브라우저를 통해 다른 애니메이션들도 체크하는 것이 가능하다. 우측 상단의 해골 캐릭터 모양을 누르면 스켈레톤 메시를 확인할 수 있다. 해당 화면에서는 스켈레톤 메시를 체크가 가능하며, 해당 스켈레톤 메시를 구성하는 스켈레톤을 일일히 체크하는 것이 가능하다.만약 척추부위 스켈레톤을 좌측 패널에서 ..

이전 강의로 컨트롤러 조준에 대한 내용이 존재하지만, 해당 강의는 패드를 통한 캐릭터 이동에 관한 내용이다.현재 키보드 및 마우스로 강의를 진행하고 있기에 해당 내용 시청만하고 내용 작성은 스킵하였다. 3인칭 카메라 스프링 암현재 캐릭터의 카메라를 조정하여 3인칭으로 보이도록 조절해보자.캐릭터 블루프린트에서 카메라 컴포넌트를 우선 생성해주자. 그리고 해당 카메라의 위치를 조정해보자. 현재 상태에서 플레이를 해보면 다음과 같은 화면을 볼 수 있다. 이 상태에서 마우스를 통해 회전을 해보면 현재 위 아래 회전이 불가능한 상태이다.추가적으로 벽 쪽으로 가면 다음과 같이 벽을 통과해서 보고 있는 것을 볼 수 있다. 우선 위아래 회전 문제를 해겨해보자.이는 카메라 디테일 패널에 있는 폰 제어 회전 사용을 활성화하..

캐릭터 이동 기능이번에는 캐릭터의 기본적인 상하좌우 이동과 점프를 구현해준다.우선 프로젝트 세팅으로 가서 상하좌우에 대한 축 매핑을 생성해주자.상하좌우의 경우 스케일 값을 통해서 하나의 축(상하, 좌우)으로 해결이 가능하다. 이제 이를 토대로 VScode에서 바인딩 작업을 해주자.우리가 사용할 함수는 다음과 같다.AddMoveMentInput() 기본적으로 벡터를 받아서 이동할 방향을 알려줌AddControllerPitchInput() : 위 아래를 바라보는 기능AddControllerYawInput() : 왼쪽 오른쪽으로 바라보는 기능Jump() : 점프 축의 경우 AxisValue가 딱히 필요없기에 해당 함수가 위한 곳에 연결하여 바로 작성하는 것이 가능하다.축에 관련한 이동 함수는 APawn에..

C++에서 폰(pawn)과 캐릭터의 차이점저번 섹션에서도 다룬 내용이지만, 이번 섹션을 통해서 좀 더 자세히 다뤄보게 된다.우선 직접 비교를 위해 pawn과 character 모두 C++ 클래스로 생성해보자. 그리고 각 C++ 클래스를 기반으로 다시 블루프린트를 생성하고 컴포넌트를 살펴보자. 위 이미지와 같이 pawn 경우 있는 것이 별로 없지만, character의 경우 캡슐과 화살표, 캐릭터 무브먼트 등이 추가로 존재한다.character의 경우 기본적으로 pawn에서 상속된 것으로 pawn의 기능을 가지고 있으나, 추가적으로 위와 같은 기능들을 가지게 되는 것이다. 우선 캡슐의 경우 대략적인 물리학, 조작, 지형과의 충돌 등을 구현하기 위한 것으로 우리가 만들 캐릭터가 해당 캡슐 안에 들어가게 된다..

이번 섹션의 목표는 우선 애니메이션 동작을 가진 3인칭 캐릭터를 이용하여 적을 물리치는 게임을 만드는 것이다.플레이어는 사격 매커니즘을 가지고 사격을 하게 되며, 적은 사격 AI를 가지고 플레이어를 쫒아와서 사격을 하게 된다.적 섹션과 마찬가지로 먼저 체력을 0으로 만드는 쪽이 승리하게 된다. 또한 이번 섹션을 위한 각종 에셋팩이 강의자료로 올라와있으므로 해당 자료를 다운받아야 한다.그리고 강의가 언리얼 엔진 4.25 버전을 사용하고 나는 언리얼 엔진 5를 사용하므로 이 점에 유의하도록 하였다. 프로젝트 셋업하기우선 이번 프로젝트를 위한 자료를 다운받고 시작하자.각 자료를 압축을 풀고, 각 폴더의 내용을 하나로 합쳐주자. 해당 에셋은 하나의 프로젝트로 되어있다.이를 실행해주고 마이그레이션 기능을 통해 ..

다듬기 및 마무리이제 마무리할 단계이다.그전에 몇가지 개선사항을 짚어보고 수정을 해보도록 하자. 첫 번째로 카메라 움직임을 더 부드럽게 조정해보자.이는 탱크에서 스프링암을 선택하면 볼 수 있는 지연 기능을 통해 조절할 수 있다.여기서 카메라 렉과 회전 렉을 활성화 해주었다.이러면 카메라가 약간 지연되면서 탱크를 부드럽게 따라오게 된다.이에 대한 수치는 카메라 지연 속도와 회전 지연 속도의 값을 조절하여 얼마나 지연 되서 따라오게 할 지 선택할 수 있다.해당 값 또한 정답이 없기에 개인의 취향에 맞게 테스트해보고 값을 선택하면 된다. 두 번째로 탱크가 죽은 뒤에도 포탑이 탱크를 향해 발사체를 발사하는 것을 수정해보자.이는 간단하게 bool 타입 변수를 선언해서 활용함으로서 해결할 수 있다. 탱크가 죽었을 ..

카메라 셰이크이번엔 역동적인 움직임 연출을 위해 카메라 셰이크 기능을 추가해준다.이러면 발사체가 대상을 맞추면 카메라가 흔들리게 된다. 언리얼 엔진에는 카메라 셰이크를 위한 내장 클래스가 존재한다.우선 C++ 클래스가 아닌 블루프린트 클래스를 생성하는데, 이는 카메라 셰이크에 변수가 많아서 블루프린트 클래스에서 작업하는 것이 훨씬 쉽기 때문이다. 먼저 발사체가 부딪혔을 때의 카메라 셰이크를 만들어주자. 그리고 얼마나 흔들릴지 진동 값을 조절해주어야 한다.자세한 수치는 직접 테스트해보며 조정해보는 것이 좋다.우선 강의에서 나온 수치를 그대로 적용하였다. 각각의 변수는진동이 지속되는 시간, 카메라 흔들림이 시작될 때 까지의 시간, 카메라 흔들림이 종료될 때까지의 시간을 의미한다. 추가적으로 위치 진동의 값도..