보키_기록용

Lyra에서 Input Mapping Context 살펴보기 (2) 본문

언리얼/Enhanced Input System

Lyra에서 Input Mapping Context 살펴보기 (2)

bokki0117 2022. 10. 26. 12:23

내용이 너무 길어져서 나눔. Lyra에서 Input Mapping Context 살펴보기 (1)

 

이전 글에서 PMI 방식 중 GameFeatureData를 사용하는 방식을 설명한다.


Enhanced Input System을 위한 Game Feature 추가하기

 

  • ShooterCore, TopDownArena (UGameFeatureData) :  사실상 방식은 같다.

GameFeatureData[ShooterCore]

ShooterCore

 

 

1. 아래 그림의 빨간줄부분에 들어갈 GameFeatureAction을 상속받은 GameFeatureAction_AddInputConfig를 만든다. 

 

GameFeatureAction_AddInputConfig.h

cpp
열기

GameFeatureAction_AddInputConfig.cpp

cpp
열기

 

2. 하다보면 #include "Input/DediTestMappableConfigPair.h"가 없다고 뜰텐데, 해당 파일을 만든다. TArray<FMappableConfigPair> InputConfigs;에서 FMappableConfigPair가 정의된 파일이다. 

TArray<FMappableConfigPair> InputConfigs

DediTestMappableConfigPair.h

cpp
열기

 

DediTestMappableConfigPair.cpp

cpp
열기

ECommonInputType때문에 #include "CommonInput/Public/CommonInputBaseTypes.h"을 해줘야 하는데, 해당 플러그인은 Common UI로 검색해서 받으면된다.

 

3. GameUserSettings를 상속받은 DediTestSettingLocal을 만든다. 

DediTestSettingLocal.h

cpp
열기

DediTestSettingLocal.cpp

cpp
열기

OnInputConfigActivated부분은 하는 역할이 없는거같은데 아직 모르겠다...

DediTestSettingLocal는 프로젝트 세팅 > 엔진 > 일반 세팅 > Default Classes > 게임 유저 세팅 클래스에 넣어야한다.

 

4. EnhancedInputComponent를 상속받아 만든 InputComponent에 AddInputMappings()를 추가한다.

DediServerTestInputComponent

cpp
열기

GetCustomPlayerInputConfig()부분은 환경설정에서 커스텀 키바인딩하는 부분인거같은데 Lyra에선 GameSettings 플러그인을 만들어서 하는 방식인거 같다. 나중에 정리.

 

5. HeroComponent로 돌아와서 InitializePlayerInput()쪽에서 AddInputMappings()을 불러준다.

cpp
열기

 

그럼 GameFeatureData는 만들었는데, 이걸 어떻게 적용시키냐는 Lyra의 Experience 시스템에 있다.

 

기존의 언리얼 개발 방식은 맵(레벨)마다 GameMode를 다르게 써서 GameMode가 여러개 생기는 방식인데, Lyra의 경우 공통적인 GameMode(프로젝트 세팅 > 프로젝트 > 맵 & 모드 > Default Modes > 기본 게임모드)가 있고, 월드 세팅에 Default Gameplay Experience를 따로 만들어서 이 Experience만 맵(레벨)마다 변경하는 식이다. 

 

1. PrimaryDataAsset을 상속받은 ExperienceDefinition을 만든다.

DediTestExperienceDefinition.h

cpp
열기

 

2. 월드세팅 만들기 : Default Gameplay Experience를 정의해야한다.

DediTestWorldSettings.h

cpp
열기

DediTestWorldSettings.cpp

cpp
열기

만들고 나서 프로젝트 세팅 > 엔진 > 일반 세팅 > Default Classes > 월드 세팅 클래스로 가서 만든 클래스를 넣으면

이런식으로 월드 세팅 탭에 Default Gameplay Experience를 설정할 수 있는 탭이 나온다.

 

3. ExperienceManagerComponent 만들기 : GameFeature를 로드하고 활성화한다.

DediExperienceManagerComponent.h

cpp
열기

DediExperienceManagerComponent.cpp

cpp
열기

뭐가 많은데, 중요한건 OnExperienceLoadComplete()에서 UGameFeaturesSubsystem::Get().LoadAndActivateGameFeaturePlugin()을 통해 GameFeauture를 활성화시키는 것이다.

 

4. Experience Definition을 상속받은 BP클래스를 만든다. (B_DediTestExperience)

안에는 만든 GameFeatureData이름을 넣는다. (Lyra에선 ShooterCore,TopDownArena에 해당)

월드 세팅 > Default Gameplay Experience에 만든 BP를 넣는다.

 

※ 주의

1. 프로젝트 세팅 > 엔진 > 일반 세팅 > Default Classes를 잘 설정했는지 확인

2. 프로젝트 세팅 > 게임 > Game Features > Game Feature Project Policy Class를 설정했는지 확인

(Lyra에서는 직접 상속받아 만든 클래스를 넣었지만 기본으로 넣어도 작동됨)

 

Comments