*언리얼엔진5를 배우는 과정을 기록하는 포스팅입니다.
아직 미숙하고 처음 글을 작성하는 만큼 미흡한 부분이 많은데 댓글로 피드백 부탁드립니다! 감사합니다.
강의자료:
https://docs.unrealengine.com/5.1/ko/enhanced-input-in-unreal-engine/
향상된 입력
향상된 입력 플러그인을 간략하게 살펴봅니다.
docs.unrealengine.com
이전에 만든 Dodge 시스템 을 이동중에 진행되는게 아니라, 특정 방향 키보드(WASD)를 두번 누르면 작동되게 변경하려 한다.
이를 위해선 먼저 인풋액션(IA_Dodge)을 만들어주고,
인풋매핑컨텍스트 에 연결을 해주는데, 이 때 Input Trigger 옵션이 필요하다.
Input Trigger는 공식 문서를 통해 알 수 있는데,
사용자의 입력을 특정 조건(패스스루)을 통하게 하여 활성화 하게 하는 기능으로 확인된다.
현재 원하는 Input Trigger가 없어서 만들어줘야한다.
C++이나, 블루프린트를 통해서 InputTrigger나 InputTriggerTimedBase를 상속하여 만들 수 있는데,
* 이 때 특정 시간안에 다시 해당 키를 눌렀을 때 적용되게 하고 싶으므로, InputTriggerTimedBase를 기반으로 만들었지만, InputTriggerTimedBase의 멤버변수중 float HeldDuration 를 활용하는 것을 보아 홀드 관련에서 쓰기 좋아보여 그냥 InputTrigger로 만드는게 좋아보인다. (그냥 진행하긴 하지만 큰 차이는 없어서 괜찮을 것 같으며 후에 필요시 수정)
C++ 을 통해 클래스를 생성하면,
다음과 같이 생성되는데,
// Triggers on actuation
실행시 트리거 되는 함수인 UpdateState_Implementation() 을 오버라이딩 해주어야한다.
다음과 같이 클래스를 만들고,
정의를 해준다.
중간에 UE_LOG()를 통해 인풋이 정상적으로 들어가면 로그로 출력을 하였고, 다시누른 시간이 몇초인지 출력하였다.
InputTrigger를 만들었으니, InputMappingContext에 연결해주고
그냥 W만 눌러서 갈때에는 인풋이 안되다가, W를 두번 연속으로 누르면 정상적으로 작동하는 것을 보인다.
(초기엔 TimeLimit 시간을 0.5f 로 설정하였으나, 생각보다 긴 것 같아서 0.3f 로 변경하였다.)
이제 정상적으로 인풋이 들어가는 것을 확인하였으니,
다음과 같이 실행하였을 때, 정상 작동 하는 것 처럼 보였으나,
W - W 를 누르면 잘 되고 각 키마다 잘 적용되었으나,
W를 누르고 앞으로 가던 상황에서 D - D를 누르면 기존 W를 누른 이력때문에 앞으로 가려고 하는 경향이 있었다..
디버깅을 위하여, UE_LOG를 이용해
다음과 같이 해당 트리거에서의 ModifiedValue의 값과
실제 IA_Dodge가 반환되는 Action Value를 체크해봤는데,
다음과 같이 InputTrigger에서는 0.0, 1.0 이라는 정상적인 값을 출력하는 반면,
IA_Dodge에서는 1.0, 1.0 이라는 이상한 값을 출력하고있다.
앞뒤 dodge와 좌우 dodge를 나누면 쉽게 해결될 것 같지만 너무 아쉬워서 찾아보았으나, 어째서 둘이 다른 값을 출력하는지도, 이전 값과 비교하고 뭐 하고 해봐도 코드상으론 정상적으로 값이 들어가고 있었다.
하나 추측으로는 S를 누르고 있는 상태에서 W-W를 누르면 앞으로 구르기가 되어야 할 것 같지만 이 때에도 뒤로 구르기가 진행되었다.
값자체는 1.0(W) 로 잘 실행됐었지만, 이동을 위해 계속 누르고 있던(S) 가 인식되면서 최종적으론 S 방향으로 구르기를 한 것 같다.
이렇다면 사실상 앞뒤 Dodge를 나눈다고 해결되는 것도 아니긴 했다.
약 2시간정도 도전해봤으나 해결되지 않아서 언리얼엔진 포럼에 질문을 남겼다.
당장에 해결하는 방법으로는 하나하나 키에 대해서는 정상적으로 입력이 되는데, 다른 인풋이 인식되면 그 값이 덮어씌워지는 느낌이라서 IA_Dodge_Fwd / IA_Dodge_Bwd / IA_Dodge_Right / IA_Dodge_Left 와 같이 나눠서 적용하면 될 것 같지만 아직 수정하지는 않았다.
후에 방법을 찾은다음에 고려할 예정이다.
(좋은 방법을 찾으면 이 포스팅도 수정할 예정이다.)
수정)
총 6시간 정도 여러가지 값을 조정해보고 다른 방법도 찾아봤으나, 마땅한 해결책을 찾을 수 없어 일단은 분리를 하는 방향으로 진행하였다.
정상적으로 작동하는 것을 확인했고,
오히려 각 방향마다 실행할 애니메이션이 다르고 한 경우를 위해 나누는거도 막 나쁘지는 않은 선택인가 싶다.
그래도 최대한 통합시키는게 좋긴 할테니 후에 다시 도전해볼 예정이다.
'Unreal5 > TPS 캐릭터 만들기' 카테고리의 다른 글
TPS 캐릭터 만들기 - 제트팩 로직 컴퍼넌트화 시키기 (0) | 2023.09.17 |
---|---|
TPS 캐릭터 만들기 - 제트팩 (0) | 2023.09.07 |
TPS 캐릭터 만들기 - Aim Offset (0) | 2023.08.24 |
TPS 캐릭터 만들기 - 회피 (0) | 2023.08.24 |
TPS 캐릭터 만들기 - 제자리 회전 분석 (0) | 2023.08.23 |