1. 무기 추가

플레이어블 캐릭터와 AI 캐릭터가 공통적으로 가져야 하는 것을 상위 클래스인 AuraCharacterBase에 추가한다.

두 캐릭터들 모두 무기를 들고 있다. 보통 무기는 캐릭터 본에 부착될 수 있도록 스켈레탈 메쉬를 사용한다.

 

(1) 코드

protected:
	virtual void BeginPlay() override;

	UPROPERTY(EditAnywhere, Category="Combat")
	TObjectPtr<USkeletalMeshComponent> Weapon;

TObjectPtr은 기존의 원시 포인터를 대체한다.

AAuraCharacterBase::AAuraCharacterBase()
{
	PrimaryActorTick.bCanEverTick = false;

	Weapon = CreateDefaultSubobject<USkeletalMeshComponent>("Weapon");
	Weapon->SetupAttachment(GetMesh(), FName("WeaponHandSocket"));
	Weapon->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}

 

(1-1) CreateDefaultSubobject 에서 TEXT 매크로를 사용하지 않는 이유?

- FName과 FString의 차이

FName은 일반적인 문자열을 사용할 때 큰 따옴표를 묶어서 사용한다.

FString은 와이드 문자열으로의 암시적 변환을 사용한다. TEXT 매크로를 이용한다.

각 함수가 받는 인자의 타입이 FName인지 FString인지에 따라서 TEXT 매크로를 사용하면 된다.

 

(1-2) 소켓 추가

캐릭터 베이스의 뼈대에 손 부위에 무기를 장착할 수 있도록 임의의 소켓을 추가한다. 또한 추가된 무기가 캐릭터와 충돌하지 않도록 콜리전을 NoCollision으로 설정한다.

 

(2) 플레이어블 캐릭터 블루프린트

(2-1) BP_AuraCharacter 설정

아래와 같은 폴더 계층구조가 되도록 폴더를 생성한다.

 

그리고 AuraCharacter를 상속하는 블루프린트를 생성한다.

메쉬를 클릭하여 디테일에서 SKM_Aura 메시를 할당한다.

위치를 캡슐에 맞게 이동하고 화살표에 전방이 행하도록 회전한다.

 

(2-2) 스켈레탈 메쉬에 소켓 생성하기

- 위의 디테일 창의 스켈레탈 메시 에셋에 폴더 브라우저 아이콘을 클릭한다(해당 에셋의 위치를 컨텐츠 서랍에서 찾아간다).

- SKM_Aura를 더블 클릭하여 연다.

- Aura의 대부분 애니메이션은 왼손을 기준으로 설정되어 있으므로 무기 소켓을 왼손에 설정할 것이다.

- hand_l 본을 찾아 우클릭 - 소켓 추가 - F2 눌러 이름을 WeaponHandSocket으로 설정한다.

 

- 소켓을 우클릭하여 프리뷰 에셋으로 SKM_Staff를 설정한다.

 

- 스킬 애니메이션을 확인하기 위해 프리뷰 컨트롤러와 애니메이션을 할당하여 애니메이션을 확인한다.

 

- 아무 지점에서 일시 정지하고, 애니메이션에 알맞도록 소켓의 위치를 조정한다.

 

- BP_AuraCharacter로 돌아와 Weapon에 SKM_Staff 스켈레탈 메시를 적용한다.

 

 

(3) 몬스터 캐릭터 블루프린트

위의 플레이어블 캐릭터 블루프린트 과정을 그대로 따라하여 BP_Goblin_Spear 블루프린트 캐릭터를 생성한다.

 

애니메이션 블루프린트 등의 내용은 GAS와 크게 상관 없으므로 생략한다.