Home [UE5 TPS 제작기] 11. Skeletal Mesh Socket을 이용한 무기 장착
Post
Cancel

[UE5 TPS 제작기] 11. Skeletal Mesh Socket을 이용한 무기 장착

공식 문서

 Skeletal Mesh Sockets

1. Skeletal Mesh Socket 이란?

Skeletal Mesh Socket을 이용해서 스켈레톤 계층에 소켓을 추가해 액터(Ex. 무기)를 연결시킬 수 있는 기능이다.

프리뷰 기능을 통해 애니메이션 중에 소켓이 제대로 설정되었는지도 확인이 가능하기 때문에 아주 좋은 기능이라 생각한다.

2. Socket 생성

Player의 Skeletal Mesh를 연 다음에 오른손에 소켓을 추가하자

우클릭 하면 창이 나온다.

img

이름은 “WeaponSocket”로 만들고 우클릭을 누르면 “프리뷰 에셋 추가”를 통해 원하는 에셋을 추가할 수 있다.

TPS게임을 만드는 중이었으니 필자의 경우 라이플을 추가했다.

img_1

그리고 우측 창을 보면 “프리뷰 씬 세팅”이 있는데 여기서 특정 애니메이션을 재생시킬 수 있다.

우선 Idle 상태 애니메이션을 기준으로 맞출 것이기 때문에 아래와 같이 세팅해 준다.

  • 프리뷰 컨트롤러: 특정 애니메이션 사용
  • 애니메이션: 가지고 있는 Idle 애니메이션

img_2

그러면 애니메이션이 재생되는 걸 볼 수 있는데 소켓의 Transform이 제대로 설정되어 있지 않아 이상한 모습이 출력되는 걸 볼 수 있다.

img_3

여러 애니메이션을 프리뷰 하면서 Socket의 Trasnform을 조절해 원하는 위치를 잡아주자!!

img_4

3. C++로 소켓에 무기 붙이기

소켓까지 마무리했으면 이제 소켓에 Actor를 소환해서 붙이는 작업을 해주면 된다.

이 작업은 예전에 UE4로도 자세히 설명했었는데 참고해도 좋을 것 같다.

Skeletal Mesh Socket을 이용한 무기 장착

일단 Header 파일에 TsubclassOf 타입의 _weapon 변수를 생성하자

그리고 무기를 붙이는 메서드인 AttachWeapon(TSubclassOf weapon)를 선언하자

1
2
3
4
5
6
7
// header 파일

UPROPERTY(EditAnyWhere, Category = "Weapon", meta = (AllowPrivateAccess = "true"))
TSubclassOf<class AWeapon> _weapon;

public:
	void AttachWeapon(TSubclassOf<class AWeapon> weapon) const;

그리고 AttachWeapon() 메서드는 아래와 같이 구현했다.

자세한 내용은 주석으로 작성했으니 주석을 참고하자!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void APlayerCharacter::AttachWeapon(TSubclassOf<class AWeapon> weapon) const
{
	if (weapon)
	{
		// SpawnActor를 통해 weapon 데이터를 기반으로 한 액터 생성
		AWeapon* spawnWeapon = GetWorld()->SpawnActor<AWeapon>(weapon);
		
		// 소켓 이름을 통해 현재 메시에서 소켓을 참조
		const USkeletalMeshSocket* weaponSocket = GetMesh()->GetSocketByName("WeaponSocket");

		if (spawnWeapon && weaponSocket)
		{
			// 소켓에 액터를 할당
			weaponSocket->AttachActor(spawnWeapon, GetMesh());
		}
	}
}
This post is licensed under CC BY 4.0 by the author.

[UE5 TPS 제작기] 10. Weapon Actor 생성

[UE] TsubclassOf