본문 바로가기

Unreal_Engine/리깅 and Procedural Animation

UE5 C++ Enhanced Input - 1 - Core Concepts and Documentation

https://youtu.be/bIo97TLsXkY

 

개요 : 당신이 만드는 프로그램이 게임용이든, 버츄어용이든 결국 입력 값부터 받는게 모든 User의 사용 편의성을 위해
가장 첫번째로 생각 해야 할 기본 단계고 중요한 작업이다.

(입력 - 처리 - 출력(모니터) - 사용자의 시각의 정보 전달)

 

정리 : Input Mapping Contexts는 계층 구조를 가지며 여기서 말한 계층 구조란 Input action 부터 시작해서
Input Action -> Key 값(W,A,S,D) -> Triggers or Modifers로 나뉜다.

 

 

 

Action : IA Look 마우스가 움직일때는 x ,y 좌표로 나타내면 되니 그것만 입력을 받는다

Action : IA_Move WASD 입력값을 받을때마다 다르다 예를들어 A를 누루면 x 값은 -1

D는 +1

W는 Y의 +1

 

9:56 So there is something set up here (where the wasd keys are all somehow linked to this) thing called 

an input action called IA move

we are going to learn exacly how that works now 

 

Action IA Jump - Boolean Value로 입력 되면 Triggered 입력 되지 않으면 None을 띄고 초록색을 띄고 있다.

=========================================================================================

10 :58 So let's learn what those input actions

 

 

 

Four main concepts

 

1. Input actions : An input action can be anything that an interactive character might do,

like jumping or opening door.

Input Actions are separate from raw input; an input Action is not concerned with the specific input that triggered it,

but does know its current state and can report an input value on up to three independent floating-point axes.

아마도 입력을 먼저 받고 액션은 따로 분리된다는것 같다.  

 

2. Input Mapping Contexts : map user inputs to Input Actions and can be dynamically added, removed, or prioritized

for each user.

 

This ensures that the user's inputs will be interpreted correctly based on the character's situation, and prevents

the need to program code at the input-handling level with awareness of the door and backpack systems.

Input actions를 Hierarchy 계층 구조로 효율적으로 관리하기 위한 시스템

 

 

3.Modifiers : 

adjust the value of raw input coming from the user's devices. An Input

 

4.Triggers : 

트리거랑 모디 파이어는 직접 만들어봐야 알듯

=====================================================================================

Input actions 

 

18:50

Input Actions are the connection between the system and your project's code

 

아마도 예전과는 다르게 Input 블루프린트도 새로 생겨서 거기서 관리 한다는걸 나타내는것 같다??
예전에는 주로 Character BP에서 관리

Input 폴더를 열면

 

 

that input mapping context we were talking about

inside of that here are three actions that we saw when we were running that 

 

IA jump which standss for input action jump (다른것도 문자를 보면 알수 있듯이 Look은 아마 마우스, Move는 WASD 키보드 값등 움직임의 관련된 입력)

 

this case I created an input action whose value type was Bool remember here in our new input action \

to change it to Axis2D 

 

아마도 여기서 자동으로 캐릭터의 움직임 상태를 보고 알아서 
1.Triggered
2.Started

3. Ongoing

중 매번 틱마다 상태를 보고 선택해서 실행한다는걸 말하는것 같다.

========================================================================================

Input mapping Contexts

 

 

Input mapping context is a hierarchy with a list of input actions at the top level 

 

Under the input Action level is a list of user inputs that can trigger each input Action, such as keys, buttons. and movement axes.

 

the bottom level contains a list of input Modifiers for each user input, which you can use to determine how an input's raw value is filtered or processed, and what restrictions it must meet in order to drive the input action at the top of its hierarchy.

 

 

여기서 트리거로 캐릭터의 움직임을 제한해주는것 같다.(추정)

 

33:43 

 

 

this hold trigger is going to make sure that our input action doesn't get triggered off until 

36:23 좀 중요한 전반적인 설명

 

 

Cast To PlayerContoller를 하고 Input Action Contexts하고 연결

because again we can have multiple contexts(행동들을 관리하는 상위 Hierarchy)going on at the same time

and the priority determines which one will be active at any given point.

우선순위는 주워진 상황에서 어떤게 활성화 될지 결정할것이다. 

it says the enhanced input local player's subsystem also supports querying or removing specific input 

mapping contexts or clearing all input mapping contexts to any player and we have to associate this with that player controller

 

쿼리는 데이터베이스DB에 사용자가 요청한 특정 데이터를 보여달라는 요청을 이야기한다. = DB에서 원하는 정보를 가져오는 코드를 작성한다는 말이다.  

여기서 말한 쿼링은 Get과 동일하다.

 

즉, Input mapping contexts는 그저 하나의 뎅터 테이블인것이다.  

Player controller와 데이터 테이블을 연결하는 방식으로 여러종류의 Input 값을  관리하는 방식을 택하는것 같다.

 

 

how this works now our project we created is a c++ template 

 

We wanted to add that input mapping context from blueprint we can do that but as the docs say we have to access the

controller now we could right click in the event graph and type get player controller 

 

Get Controller

Get Player Contoller 둘중 어떤 차이점이 있을까?

 

 

get controller 와 Get Player Contoller는 원래부터 있는 함수

 

showing that from the player controller we can get the enhanced input local player subsystem 

so as player controller we can type in enhanced input local player subsystem and look at that we have a getter function

so if we click that here 

이 과정은 이미 C++에 올라와 있지만

블루 프린트로도 만드는걸 보여주기 위해 보여줫다고 한다.

이러한 코드가 있어서 캐릭터가 움직일수있다고 한다.

 

1. so getting the enhanced input local player subsystem

2.is how we add input mappiong contexts to a given player 

3. it s a little bit different than old way of doing it and the docs say each input mapping context

that you add makes it possible to trigger the included input

you can change the set of input mapping contexts at any time during gameplay

이게 된다면 캐릭터의 행동이나 애니메이션 값을 언제든지 바꿀수 있지 않을까?

 

블루프린트가 0일 경우 Priority는 C++가 먼저 가진다. 즉 같은 우선순위 인티저일 경우에는

c++이 아마 parent class라 더 우선순위인거같다.

 

 

각각의 입력값은 Input Action과 연결되어 있으며(Input Mapping Context 안에있는) 그 입력의 Input Trigger가 진행되기전에  유저가 정의한 Input Modifiers를 먼저 실행한다.

아마 Input Trigger가 키를 어떤방식으로 눌럿나 먼저 체크하고

Input Modifier가 그 입력값 raw data를 어떤 형태로 변환 시킬지 결정하는 구조인것 같다.

블루프린트로 따로 Input Modifier를 설정하는 방법

1. Input Modifier를 Class로 만들고 Parent로 삼는다.

2. Input Modifier의 자식클래스를 만들고 Input Modifier Class의 Modify Raw 함수를 재정의(Override)를 한다.

(활용 방법은 아직 모르겠다.)

 

 

 

 

 

 

 

기본적으로 할당된 Input Mapping Context에서 

WASD의 Modifiers 할당 된 Modifier 및 역할

Swizzle Axis Values : to make some keys register as Y- axis instead of the default x -Axis

Negate : to make some keys register as negative

아마 언리얼 엔진4에서는 기본적인 이동처리를 할려면 Get controller rotation or Get controll rotation등을 처리해서 방향성을 정했는데 좀 더 쉽게 제어할려고 이런 시스템이 있지 않나 쉽다.

 

In other words, we are changing the order that raw  data will fill individual axes

it s changing which axis is populated first setting this to y x z means that when we press the W key

instead of the default Behavior which is to pass that raw data into the x-axis for IM_Movec