
Smoothing Character Movement움직임을 더 자연스럽게 만들어보자.지금은 멈출 때 갑작스럽게 멈추는 현상이 존재한다. 또한 좌우로 빠르게 움직이는 경우와 같이 특정 상황에서 캐릭터가 덜렁거리는 듯한 모습이 발생한다.이를 위해 먼저 Smooth Time을 설정해주자.그리고 Type은 Averaged로 변경해주었다.(언리얼 4의 경우 smooth Time -> interpolation / Type 기본 Averaged) Jog_start와 Jog_stop 2가지 블렌드 스페이스에 대해 같은 작업을 해주자. 이제 캐릭터가 크게 덜렁거리지 않고 훨씬 부드럽게 움직이는 모습을 볼 수 있다. 그리고 BP ShooterCharater 클래스의 CharacterMovement 디테일 패널을 보면 무브..

Jog Stop Blendspace이어서 Jog Stop에 대한 블렌드 스페이스이다.해당 애니메이션도 마찬가지로 left, right, bwd에 대해 stop 애니메이션이 따로 존재한다.똑같이 작업해주자. 컴파일 해보면 이번엔 제대로 적용되지 않고 여전히 jog_fwd_stop 동작이 재생되는 것을 볼 수 있다.이는 멈추는 순간이 더 이상 해당 방향의 속도를 가진 것이 아니라 0의 속도를 가지기 때문이다.따라서 0일 때의 애니메이션이 jog_fwd_stop 애니메이션이 재생되는 것이다. 이를 해결하기 위해서는 0이 아닐 때 직전 Offset 값을 얻어줄 필요가 있다.속도가 0보다 클 때만 따로 값을 저장해주도록 하자. 그리고 Offset 값을 해당 값으로 교체해주자. 이제 애니메이션을 다듬을 차례다. 우..

Jog Start BlendspaceJog Start에 대한 애니메이션도 블렌딩 작업이 필요하다.현재 모습에서 좌우로 뛰기 시작하면 다소 어색한 모습을 볼 수 있다.애니메이션을 보면 left, right, bwd 전부에 대한 start 동작이 따로 존재하는 것을 알 수 있다.이를 이용해서 블렌드 스페이스를 만들어주자. 좌우 애니메이션 할당 때와 동일하게 블렌드 스페이스에 배치해주자. 이번엔 JogStart 스테이트에 해당 블렌드 스페이스를 배치해주자. 필요시 기존 애니메이션 복사본을 조금 다듬어주자.여기서는 좌우 시작 애니메이션에 대해 다듬어주었다.

Strafing Blendspace이제 좌우 애니메이션을 실제로 할당해보자.우리는 블렌드 스페이스를 사용하여 자연스럽게 애니메이션이 블렌딩되도록 할 것이다.따라서 블렌드 스페이스를 먼저 생성해주자. 해당 블렌드 스페이스를 보면 디테일 패널에 Axis에 대한 세팅을 하는 칸이 존재한다.여기서 우리가 필요한 것은 수평 축이다.해당 값을 OffsetYaw로 하여, -180 ~ 180으로 설정해주자. 수직축은 이름만 할당하고 아직 사용하지 않으니 건들지 않는다. 이제 jog_fwd 부터 할당해보자.앞으로 걷는 경우이니 OffsetYaw가 0일 때여야 할 것이다. 뒤로 걷는 경우도 설정해주자.0과 반대로 180인 경우 뒤로 걷을 것이다.-180, 180 두 케이스 모두에 할당해주자. 좌우측도 할당해주자.각각 -9..

Movement Offset Yaw현재 좌우 이동에 대한 애니메이션이 존재하지 않는다.따라서 할당을 해주어야 하는데 이에 앞서서 어떤 상태 일 때 그러한 애니메이션을 할당 또는 블렌딩해야 하는지 알아야 할 필요가 있다.이를 위해 목표 회전 상태와 회전 값, 또 이 둘을 통해 상대적인 회전 차이 값을 얻을 수 있다.이것이 우리의 목표인 Movement OffSet Yaw 값이 된다. 먼저 해당 변수를 선언해주자.해당 작업은 애니메이션을 위한 것이므로 ShooterAinmInstance 클래스에서 하게 된다. 우선 목표 회전 상태를 얻어서 AddOnScreenDebugMessage 함수를 통해 뷰포트에 출력해보자. 이어서 회전 값도 구해서 출력해보자. 해당 값들을 NormalizedDeltaRotator 함..

Refactor Beam End Code현재 FireWeapon 함수가 상당히 길어져서 가독성이 안좋아졌다.해당 함수를 리팩토링하여 가독성을 높여보도록 하자. 빔의 마지막 위치를 얻는 데 필요한 내용을 모두 분리시켜보자.우선 인풋으로 필요한건 라인트레이스에 필요한 소켓 위치와 갱신될 빔위치이다.둘다 참조 변수로 선언해주고, 소켓 위치는 고정이기에 const도 추가로 작성해준다. 이제 필요한 내용을 보면 뷰포트사이즈를 얻어서 정중앙 위치를 얻고 이를 월드 값으로 변환하는 과정과,변환 성공 여부를 토대로 라인 트레이스를 하는 과정이다. 끝점에 대한 값은 인풋 참조 변수는 OutBeamLocation을 사용한다.그리고 총구 기준 시작점인 소켓 위치는 마찬가지로 인풋으로 설정했던 MuzzleSocketLocat..

Trace from Gun Barrel이제 크로스헤어를 통해 사격하므로 아무 문제없는 것 같지만, 오히려 크로스헤어를 기준으로 삼기에 문제가 발생하는 부분도 존재한다.만약 현재 큐브 앞에 또다른 큐브를 위치시키고 크로스헤어를 앞의 큐브 바로 옆에 위치시켜 사격할 경우 실제론 앞의 큐브에 부딪히지만 멈추지 않고 뒷 큐브까지 사격이 도달하는 모습을 볼 수 있다. 이를 수정하기 위해 라인 트레이스를 하나 더 설정해야 한다.새롭게 크로스헤어를 기준으로 설정했었지만, 기존에 했던 대로 총신을 기준으로 하는 라인 트레이스를 추가적으로 생성해주자. 그리고 임팩트 파티클의 위치 또한 수정해주자.2번의 라인 트레이스를 거친 후에 생성되어야 한다. 이제 컴파일 해보면 제대로 앞의 큐브에 먼저 충돌하는 모습을 볼 수 있다.

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