2. 해당 작업은 임시 연동을 위해 작업되었으며, 타 환경 (네트워크 환경 등)에서는 정상 작동을 보장하지 않습니다.
3. 필요시, 코드를 적당히 수정해서 사용해주세요!
(아마 기억이 맞다면) 언리얼 5.3에 들어오면서 큰 변화가 몇가지 생겼다.
그중에 프로그래머 입장에서 유의미하게 볼것이 바로 EnhancedInput의 정식 사용 시작 및 AbilitySystem의 공식 플러그인 화 일것이다.
근데 웃긴게, 이 두가지가 하나는 정식기능, 다른 하나는 플러그인이라서 그런가 공식적으로 지원하는 연동 코드가 없다.....
물론, 진짜 하나도 없진 않다. 대신, LyraStarterGame에 포함되어있을뿐...
LyraStarterGame에서는 해당 기능을 HeroComponent라는 연동 컴포넌트와, EnhancedInput을 위한 LyraInputComponent를 만들어서 사용하는데, 해당 컴포넌트 및 Lyra 식 사용에 대한 분석은 다음에 하기로 하고, 우선은 조금 빠른 사용법을 익혀보도록 하자.
* 해당 코드의 일부는 EpicGames에서 제공하는 Lyra Starter Game에서 발췌했습니다.
우선, 이전 글을 참고하여 AbilitySystemComponent를 정상적으로 사용할 수 있는 상태를 기준으로 한다.
Lyra에서는 (EditDefaultsOnly, BlueprintReadOnly) 조건으로 사용중이나, 적당히 필요한대로 쓰시면 될것같다.
그 다음부터는 선택지가 갈리는데, EnhancedInputComponent 및 PanwComponent를 상속받아서 Lyra와 같이 InputComponent + HeroComponent를 만들어서 사용하거나, 간략하게 AbilitySystemComponent를 상속하여 구현해주는 방법 등이 있다.
여기서는 AbilitySystemComponent 을 상속하여 추가 함수를 만들어주는 방식으로 구현하고자 한다.
Lyra 방식은... 공부도 하실겸 Lyra 코드를 열어보시는걸 추천드립니다.
첫번째. UAbilitySystemComponent를 상속받은 컴포넌트를 추가한다.
두번째. 위에서 만든 DataAsset Class를 헤더에 추가한다. (단순히 전방선언으로 사용하면 구조체의 사이즈를 알 수 없어 오류가 발생한다)
세번째. 다음과 같이 (혹은 적당히 수정하여) 헤더를 작성한다.
UCLASS()
class PROJECTCLOUD_API UCLAbilitySystemComponent : public UAbilitySystemComponent
{
GENERATED_BODY()
public:
//인풋 액션을 세팅하는 함수 (return bool인 이유는 오류 검출 용도)
bool BindInputActions(const UCLAbilityInputConfig* InputConfig, UEnhancedInputComponent* EnhancedInputComponent);
//인풋 액션을 호출하는 바인딩 함수
void TryActiveAbilityFromInputAction(const FInputActionInstance& Value);
private:
//인풋 액션 리스트
TMap<TObjectPtr<const UInputAction>, FGameplayTag> InputactionList;
};
네번째. cpp 파일에 필요한 헤더들을 추가한다. EnhancedInput관련, GameplayTag 관련 헤더를 추가해주면 된다.