보키_기록용
Enhanced Input Priority 및 Consume Input에 대해 본문
입력 우선순위에 대해 리서치 하다가 정리하는게 좋을 거 같아서 만드는 페이지입니다.
기본적인 Enhanced Input System에 대해서는
https://bokki0117.tistory.com/33
C++에서 Enhanced Input System 사용하기
Lyra 게임을 살펴보다가 테스트용으로 Enhanced Input System이라는 것을 적용해보기로 했다. Enhanced Input 핵심 요소 입력 액션(Input Actions) : Enhanced Input System과 프로젝트 코드 사이의 통신 링크. 점프하
bokki0117.tistory.com
에 있습니다.
Enhanced Input을 쓸려면 Input Mapping Context(IMC)가 필수 요소입니다. IMC를 추가하려면 AddMappingContext()를 사용합니다.
Priority 로 우선 순위를 지정할 수 있습니다.
검증 전에
IMC_A, IMC_B 모두 IA_MouseClick이라는 InputAction을 가지고 있습니다.
IMC_A는 왼쪽 마우스 버튼이 눌렸을때(Pressed) 발동됩니다.
IMC_B는 왼쪽 마우스 버튼이 해제되었을때(Released) 발동됩니다.
IMC_A의 우선 순위가 더 높을 때
IMC_A의 IA_MouseClick이 우선되어 왼쪽 마우스 클릭을 누른 순간 트리거 됩니다.
IMC_B의 Released는 트리거되지 않습니다.
IMC_B의 우선 순위가 더 높을 때
IMC_A의 Pressed는 트리거되지 않습니다.
IMC_B의 IA_MouseClick이 우선되어 왼쪽 마우스 클릭을 놓은 순간 트리거 됩니다.
Priority가 동일할 때
나중에 추가된 IMC_B의 Released가 우선되어 왼쪽 마우스 클릭을 놓은 순간 트리거 됩니다.
IMC_A의 Pressed는 트리거되지 않습니다.
→ 같은 Priority일 경우 나중에 추가된 것이 우선됩니다.
할당 된 키가 다른 경우
Priority에 상관없이 양쪽 모두 트리거됩니다.
InputAction이 다르지만 동일한 키를 할당했을 때

Priority가 높은 것이 우선됩니다.
Consume Input(입력 소모)
지금까지의 Consume Input(입력 소모)은 모두 True 상태였습니다.
Consume Input(입력 소모)가 False일 경우 Priority에 상관없이 양쪽 모두 트리거됩니다.
Consume Input(입력 소모)가 True일 시 : Priority의 영향을 받아 우선 순위에 상정해 트리거된다.
Consume Input(입력 소모)가 False일 시 : Priority에 상관없이 양쪽 모두 트리거된다.
+ ) Ignore All Pressed Keys Untill Release
AddMappingContext()의 Options을 분할 시키면
이런 식으로 값 2개가 나오는데 Lyra에서도 Ignore All Pressed Keys Untill Release는 코드에서 명시적으로 적어놔서 찾아봤습니다.
Ignore All Pressed Keys Untill Release가 Ture일 시 : 해당 입력이 트리거되면 다른 입력을 무시합니다.
Ignore All Pressed Keys Untill Release가 False일 시 : 입력이 트리거되어도 다른 입력을 받을 수 있습니다.
디폴트는 True상태입니다만, Lyra에서나 우리 코드에서나 False상태로 사용하고 있습니다.
다음은 Lyra에서 Ignore All Pressed Keys Untill Release에 대한 주석 내용을 번역한 것입니다.
우리는 매핑 컨텍스트를 추가할 때 "Down" 상태였던 키를 무시하고 싶지 않습니다.
이렇게 하면 이동 키를 누른 상태에서 죽을 수 있고,
부활을 기다리는 동안 계속 누르고 있으면, 바로 부활한 직후에도 적용됩니다.
bIgnoreAllPressedKeysUntilRelease를 기본 값인 "true" 상태로 두면,
플레이어는 이동 키를 놓아야 하며, 부활 후 다시 눌러야 합니다.
GamePause같이 모든 입력을 무시해야 할 때는 Ture로 놓는 것이 좋을 것 같습니다.
PMI(PlayerMappableInputconfig)
우리는 IMC를 바로 AddMappingContext()를 써서 바인딩하지 않고 PMI로 IMC들을 모아서 등록합니다.
PMI를 등록하는 AddPlayerMappableConfig() 를 보면 내부에서 AddMappingContext()를 쓰는 것을 알 수 있습니다.
void IEnhancedInputSubsystemInterface::AddPlayerMappableConfig(const UPlayerMappableInputConfig* Config, const FModifyContextOptions& Options)
{
if(Config)
{
for(TPair<TObjectPtr<UInputMappingContext>, int32> Pair : Config->GetMappingContexts())
{
AddMappingContext(Pair.Key, Pair.Value, Options);
}
}
}
TPair<TObjectPtr<UInputMappingContext>, int32> Pair에서 Pair.Value에 해당하는 부분이 Priority입니다.
BP에서는 빨간 네모 박스 부분을 수정하면 우선 순위를 지정할 수 있습니다.
참고
https://ci-en.net/creator/15980/article/771199
【UE5】Enhanced Input:Priority や Consume Input の検証 - わんころのUE5勉強会 - Ci-en(シエン)
皆様、あけましておめでとうございます!! 今年も一年宜しくお願い致します! 2022年で一番触ったはずの Enhanced Input が未だによく分かっていません。 すべての始まりである「Add Mapping Conte
ci-en.net:443
'언리얼 > Enhanced Input System' 카테고리의 다른 글
UE5 Enhanced Input으로 카메라 터치 조작하기(Pan Camera) (0) | 2023.03.21 |
---|---|
Lyra에서 Input Mapping Context 살펴보기 (3) (0) | 2022.10.27 |
Lyra에서 Input Mapping Context 살펴보기 (2) (0) | 2022.10.26 |
Enhanced Input System을 위한 Game Feature 추가하기 (0) | 2022.10.14 |
Lyra에서 Input Mapping Context 살펴보기 (1) (0) | 2022.10.11 |