소켓 => RPG게임 무기변경
* 구현
1.BPCharacter::Mesh->Skeletal Mesh->Hand_l에 소켓추가 => 코드상에서 찾아서 매쉬 추가가능
2.캐릭터->생성자
//1. hand_l_socket을 찾아옴
FName WeaponSocket(TEXT("hand_l_socket"));
if (GetMesh()->DoesSocketExist(WeaponSocket))
{
//3.무기 만들어줌
Weapon = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("WEAPON"));
//2.경로에가서 매쉬찾아옴, SW에 저장
static ConstructorHelpers::FObjectFinder<UStaticMesh>SW(TEXT("StaticMesh'/Game/ParagonGreystone/FX/Meshes/Heroes/Greystone/SM_Greystone_Blade_01.SM_Greystone_Blade_01'"));
if (SW.Succeeded())
{
//4. 무기에 매쉬붙여줌
Weapon->SetStaticMesh(SW.Object);
}
//5.웨펀소켓(hand_l_socket)에 무기붙이기
Weapon->SetupAttachment(GetMesh(), WeaponSocket);
}
}
* 무기를 땅바닥에 놓았다가 들었다가 구현
방법 : 무기를 액터로 만듬
1.MyWeapon.cpp 생성 // 부모:액터
2.생성자->캐릭터 코드 복붙
//3.무기 만들어줌
Weapon = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("WEAPON"));
//2.경로에가서 매쉬찾아옴, SW에 저장
static ConstructorHelpers::FObjectFinder<UStaticMesh>SW(TEXT("StaticMesh'/Game/ParagonGreystone/FX/Meshes/Heroes/Greystone/SM_Greystone_Blade_01.SM_Greystone_Blade_01'"));
if (SW.Succeeded())
{
//4. 무기에 매쉬붙여줌
Weapon->SetStaticMesh(SW.Object);
}
//충돌설정
Weapon->SetCollisionProfileName(TEXT("NoCollision"));
3.캐릭터->include MyWeapon.h
캐릭터->비긴플레이
<AMyWeapon>을 부를때 생성자가 실행되어 매쉬가붙는것 같다..
void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
FName WeaponSocket(TEXT("hand_l_socket"));
//<무기>(위치,회전) 스폰하기 == 만들기
//0,0 위치에 무기 만들어라
auto CurrentWeapon = GetWorld()->SpawnActor<AMyWeapon>(FVector::ZeroVector, FRotator::ZeroRotator);
//* 줍기 구현
//널체크
if (CurrentWeapon)
{
//그 무기를 hand_l_socket에 붙여라.
CurrentWeapon->AttachToComponent(GetMesh(),
FAttachmentTransformRules::SnapToTargetNotIncludingScale,
WeaponSocket);
}
}
'UE5' 카테고리의 다른 글
스탯 매니저 (0) | 2022.08.16 |
---|---|
아이템 줍기 (0) | 2022.08.16 |
충돌 기초 (0) | 2022.08.15 |
블렌드 스페이스 (0) | 2022.08.14 |
애니메이션 노티파이 (0) | 2022.08.14 |