
Directing Rifle Shots크로스헤어가 존재하지만 발사할 때 크로스헤어와는 사실상 무관한 방향으로 발사된다.이번에는 이러한 현상을 수정하도록 해보자. 우선 기존 라인트레이스 내용과 빔 파티클 출력 부분을 주석 처리해야 한다.기존에 소켓 위치를 기준으로 시작점을 세웠지만, 우리는 새롭게 크로스헤어를 시작점으로 삼아야 한다. 먼저 뷰포트 사이즈를 얻고, 이를 토대로 중앙 값(크로스 헤어 위치)을 얻어주자.그리고 약간 위로 올리기 위해 Y 값을 50 감소 시켜주자.이렇게 얻은 화면 상의 좌표를 토대로 월드 공간의 위치와 방향으로 변환시켜주자. 변환이 성공했다면 이후는 전에 했던대로 똑같이 라인트레이스와 빔 파티클을 생성해주면 된다.다만 생성 위치는 이제 시작점이 Crosshair의 월드 위치이고 끝..

HUD Class and Crosshairs이제 크로스헤어를 설정해주자.먼저 강의에 사용할 크로스헤어를 마찬가지로 강사 깃허브를 통해 다운로드 받아서 프로젝트에 임포트해주자. 그리고 다운받은 모든 크로스헤어에 대해서 Compression Settings을 UserInterface2D (RGBA)로 바꿔주자.해당 설정은 텍스쳐를 UI로 사용할 때 최적화되어있다. 그리고 블루프린트 HUD 클래스를 생성해주자. 생성한 HUD 클래스를 게임모드에서 할당해주자. 이제 HUD 클래스 내용을 설정해주자.먼저 Event Receive Draw HUD 함수를 통해 HUD를 그리게 된다.그리고 중앙 값 체크를 위한 변수를 생성해주자. 기존 x, y 값을 반으로 나누고 Vector 2D에 맞게 float로 변환하여 Scre..

Beam Particles총기 발사할때 연기 파티클도 추가해주자.우선 강의 자료로 올라온 에셋들을 다운받아서 프로젝트에 옮겨주어야한다.그리고 해당 에셋들은 텍스처가 제대로 적용되어있지 않아 직접 수정해줄 필요가 있다. 아래와 같이 Texture Sample을 Beam Texture를 각 Material (M_Beam, M_Beam_Faded) 화면으로 끌어서 대체해주자. SmokeTrail 및 SmokeTrail_Faded 에 대해서도 비슷한 작업이 필요하다.Required 항목을 누르고 Material을 할당해주자. 이제 할당하기 위한 값을 선언해주자. 그리고 연기트레일의 끝점을 할당해주자.기본적으로는 라인트레이스의 끝점과 동일하지만, 물체에 부딪혔을 때는 해당 시점에서 끝나야 하므로 끝점을 히트 위치..

Impact Particles 충돌 지점에도 충돌 이펙트를 표시해주도록 하자.MuzzleFlash 때와 거의 동일하게 해주면 된다. 충돌 임팩트이므로, 충돌된 순간에 생성해주자. 마찬가지로 파티클을 할당해주자. 이제 발사해보면 충돌 지점에 임팩트가 남아있다.대신 현재 캐릭터가 idle시 조금씩 움직여서 발사시 마다 상당히 다른 곳을 맞추고 있다.이를 수정하기 위해 idle을 좀 더 정적인 애니메이션으로 변경해주었다.

Line Tracing for Bullet Hits사격을 실제로 맞추기 위한 작업을 해주자.Lince Trace 기능을 통해 충돌 여부를 판단하게 된다.충돌 여부를 쉽게 판별하기 위해 맵에 넓찍한 큐브를 설치해주자. 다음으로 라인트레이스를 설정해주자.필요한 값은 아웃파라미터인 히트 결과, 시작 지점, 끝점, 충돌 채널이다. 첫 번째는 아웃파라미터이므로 FHitResult 변수를 선언하여 그대로 넘겨주면 되고,시작 지점은 기존 소켓의 위치를 사용한다.끝점은 시작지점에 목표 거리 * x 축 방향 만큼 곱한 벡터 값을 할당해주면 된다.여기서는 우선 하드코딩으로 50000의 거리를 지정하였다.마지막으로 채널은 ECC_Visibility로 기본적으로 시각적으로 보이는 것에 대한 충돌 채널이다. 충돌 여부를 간단히..

Blending Shooting Animations사격 애니메이션이 이제 존재하지만, 달리면서 사격하면 애니메이션이 부자연스럽다.이번엔 이를 수정하기 위해 blend 작업을 해보도록 하자. 우리가 blend 할 대상은 기존 Ground Locomotion에 대한 애니메이션과, 사격이 포함된 애니메이션이다.이 2개를 먼저 Cached 작업을 통해 정리해주도록 하자. blend를 하기 위해 어느 뼈대를 미리 살펴보자.사격 모션은 상체에 해당하므로, 하체는 그대로 달리고 상체만 바뀌는 것이 목표이다.따라서 상체 쪽에 위치한 뼈대를 체크해주자. 이제 Layered blend per bone 노드를 통해 이를 섞어 줄 수 있다.Layer Setup에서 하위 Branch Filters를 추가하고 여기서 Bone N..

Shooting Animation슈팅하는 순간에 대한 애니메이션도 추가해주자.우선 원본 애니메이션을 찾아서 해당 애니메이션을 복사해주자. 복사한 애니메이션에 대해 프레임을 잘라주자.뒷부분이 필요없어 보이므로 앞부분만 채택했다. 다음으로 애니메이션 몽타주를 생성했다.기존 스테이트 머신을 사용하지 않고 애니메이션 몽타주를 사용하는 이유는 사격 모션에 대해 보다 더 자연스럽게 구현할 수 있기 때문이다. 해당 몽타주에서 방금 만든 복사본 애니메이션을 넣어주자. 그리고 새롭게 Section을 생성해주자.해당 Section은 사격 모션 애니메이션에 걸맞게 Start Fire로 설정해줄 것이다.그리고 Default Section을 뒤로 쭉 땡기면 StartFire Section이 앞으로 할당되고, 이후 Default..

Shooting Particles사운드에 이어 이펙트도 추가해주자.이펙트를 추가해주기에 앞서서 이펙트가 생성될 위치를 먼저 잡아주자.현재 캐릭터의 스켈레톤 골격을 보면 총이 있는 위치를 볼 수 있다.해당 위치에 이펙트 스폰용 소켓을 추가해주자. 그리고 해당 소켓 위치를 총구 앞으로 조절해주고, 방향 또한 x 축이 앞으로 가도록 해주자. 이제 사운드 때와 마찬가지로 할당할 이펙트를 선언해주자. 사전에 생성한 소켓 위치를 토대로 이펙트를 생성해주자.사용한 함수는 SpawnEmitterAtLocation 함수이다.그리고 소켓 관련한 변수는 변할 필요가 없는 값이므로 const로 값을 고정시켜주었다. 다음으로 이펙트를 확인해주자.사용할 이펙트는 P_BelicaMuzzle이다.해당 이펙트를 확인해보면 3번의 총 ..

Shooting Sound Effects총기에 사운드 효과를 입혀주자.사운드 에셋은 강의 첨부된 자료를 사용한다.우선 자료를 다운하여 프로젝트에 임포트해주자. 그리고 해당 파일을 기준으로 사운드 큐을 만들어주자. 그리고 해당 큐에 다운 받은 사운드 10개를 랜덤으로 재생되도록 묶어주자.랜덤은 해당 사운드 큐 파일에서 우클릭시 생성이 가능하다.사운드 파일들은 전부 클릭 후에 사운드 큐 화면으로 드래그 해주면 된다. 이제 이를 좌클릭 눌렀을 때 사운드가 발생하도록 해주자.우선 이를 위해 할당할 사운드를 선언해주자. 그리고 기존 ulog 내용을 지우고 PlaySound2D 함수를 통해 사운드를 실행시켜주자. 이제 BP ShooterCharacter 클래스에 사운드 큐를 할당하고 실행해보면 좌클릭 시 랜덤한 1..

Rotate Character to Movement현재 앞뒤 이동만 되는 상태로 좌우로 이동하게 되면 앞을 보고 있는 모습 유지된 상태로 이동하게 된다.이번 강의는 이를 위한 작업을 하게 된다. 우선 캐릭터 회전이 카메라 회전과 일치하지 않도록 변경해주자.이를 위해 bUseControllerRotation 값들을 모두 false로 변경해주게 된다. 캐릭터의 방향이 이동 방향에 맞도록 조정되도록 하기 위해 bOrientRotationToMovement 값을 true로 바꿔주자.그리고 회전 속도 또한 설정해주자 여기서는 540으로 설정하였다.하는김에 점프속도 및 공중 제어 시간 또한 설정해주었다. 바로 컴파일 했을 때 제대로 동작하지 않을 수 있다.왜냐하면 해당 값들이 블루프린트에도 존재하는데, 블루프린트에..

Trimming Animations전진하고 멈추는 애니메이션을 조금 다듬어보자.현 상태는 시작할때 준비시간이 다소 존재하고, 멈출 때 또한 비슷하게 딜레이 시간이 존재한다.이를 위해 원본 애니메이션에서 복사하여 복사한 애니메이션을 다듬는데 사용하도록 하자. 그리고 우선 기존에 스테이트에 할당했던 애니메이션을 바꿔주자. 이제 프레임을 다듬어주자.깔끔한 동작을 위해 한번 걷는 사이클을 제외한 뒷 프레임을 모두 제거해주자. 그리고 이어서 앞에 걷기 시작하기 전의 딜레이 부분도 삭제해주자. 마찬가지로 멈출 때 애니메이션 또한 작업해주자.작업하다보면 되돌리고 싶을 때도 있을 텐데, 이를 위해 복사본을 사용하는 것이다.또한 테스트해보고 맘에 안들면 추가적으로 삭제도 해주자.

Run Animations달리는 애니메이션을 설정해보자.우선 기본적인 스테이트 머신을 생성해주자. 그리고 스테이트를 통해 간단하게 구성도를 만들어주자.idle -> 달리기 시작 -> 달리기 -> 달리기 멈춤 -> idle 형태이다. 각 스테이트에 대한 애니메이션과 조건들을 생성해주자. 이제 컴파일 하고 실행해보면 달리기 애니메이션이 실행된다.이후 강의를 통해 좀 더 다듬는 과정을 거치게 된다.

The Animation Blueprint직전 강의를 통해 만들었던 애니메이션 클래스를 토대로 블루프린트를 생성해주자. 그리고 미리 BP ShooterCharater로 들어가서 Anim Class를 방금 만든 BP 클래스로 설정해주자. 이제 Event Graph로 들어가보면,우클릭을 통해 VScode에서 작성했던 Update Animation Properties 함수를 호출할 수 있다.이를 event Blueprint Update Animation의 아웃풋 값과 연결해주자.