인프런 커뮤니티 질문&답변

Cr0ssEyE님의 프로필 이미지
Cr0ssEyE

작성한 질문수

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

섹션1 캐릭터 컨트롤 설정의 IMC 관련 질문입니다.

해결된 질문

작성

·

518

·

수정됨

0

섹션1의 캐릭터 컨트롤 설정 파트에서 궁금한 부분이 있어 질문 드립니다.

강의 영상에서는 DataAsset 부분(15:15 ~ 16:10)에서 IMC 설정을 하지 않고 생략 되는 것으로 알고 있습니다.
(때문에 Github 소스 자체에는 문제가 없습니다. 다만 영상과 같이 DataAsset의 IMC를 None으로 두면=영상 내용을 그대로 따라한다면 질문1 질문2 과 같은 문제가 발생합니다.)

이를 해결하기 위해서 위의 링크들과 같이 에디터 상에서 DataAsset에 직접 IMC를 지정하는 방법도 있지만, DataAsset을 불러오는 김에 IMC도 코드를 이용해서 추가 하는 것이 좋지 않을까? 싶어 코드를 약간 변형해봤습니다.

아래는 ABCharacterBase.cpp소스코드 일부 입니다. 기존 소스코드에 헤더를 추가한 상태를 기준으로 48번 Line부터 내용을 추가 했습니다.

#include "InputMappingContext.h" // 헤더 파일 추가

(중간 생략...)
// DataAsset 탐색
static ConstructorHelpers::FObjectFinder<UABCharacterControlData> ShoulderDataRef(TEXT("/Script/ArenaBattle.ABCharacterControlData'/Game/ArenaBattle/CharacterControl/ABC_Shoulder.ABC_Shoulder'"));
	if (ShoulderDataRef.Succeeded())
	{
		// DataAsset에 IMC 삽입
		static ConstructorHelpers::FObjectFinder<UInputMappingContext>ShoulderInputMappingContextRef(TEXT("/Script/EnhancedInput.InputMappingContext'/Game/ArenaBattle/Input/IMC_Shoulder.IMC_Shoulder'"));
		if(ShoulderInputMappingContextRef.Succeeded())
		{
			UInputMappingContext* ShoulderInputMappingContext = ShoulderInputMappingContextRef.Object;
			ShoulderDataRef.Object->InputMappingContext = ShoulderInputMappingContext;
		}
		CharacterControlManager.Add(ECharacterControlType::Shoulder, ShoulderDataRef.Object); // 기존 DataRef의 InputMappingContext는 Default = None으로 설정되어 있었음 
	}
// DataAsset 탐색. Quarter <-> Quater 오타 주의
static ConstructorHelpers::FObjectFinder<UABCharacterControlData> QuarterDataRef(TEXT("/Script/ArenaBattle.ABCharacterControlData'/Game/ArenaBattle/CharacterControl/ABC_Quarter.ABC_Quarter'"));
	if (QuarterDataRef.Succeeded())
	{
		// DataAsset에 IMC 삽입하는 과정
		static ConstructorHelpers::FObjectFinder<UInputMappingContext>QuarterInputMappingContextRef(TEXT("/Script/EnhancedInput.InputMappingContext'/Game/ArenaBattle/Input/IMC_Quarter.IMC_Quarter'"));
		if(QuarterInputMappingContextRef.Succeeded())
		{
			UInputMappingContext* QuarterInputMappingContext = QuarterInputMappingContextRef.Object;
			QuarterDataRef.Object->InputMappingContext = QuarterInputMappingContext;
		}
		CharacterControlManager.Add(ECharacterControlType::Quarter, QuarterDataRef.Object);
	}

위와 같은 방식들로 IMC를 DataAsset에 추가해줬을 때 별다른 문제가 없다면,
해당 섹션의 강의 정보에 공유 해주실 수 있으신가요?!

아무 생각 없이 코드만 생각하다가 여기서 쳇바퀴 열심히 돌렸습니다 ㅎㅎ;;

답변 2

1

이득우님의 프로필 이미지
이득우
지식공유자

관련해서 영상 업데이트했습니다. 학습하는데 도움되었으면 합니다.

1

이득우님의 프로필 이미지
이득우
지식공유자

해당 내용은 질문이 많이 오는 관계로 영상에서부터 한번 업데이트 해야겠네요.
좋은 의견 감사합니다~

Cr0ssEyE님의 프로필 이미지
Cr0ssEyE

작성한 질문수

질문하기