인생언리얼 자료실폴더내 SniperGun.zip을 풀어 Content폴더 밑에 복사해줍니다.
sniper1은 아직 머터리얼이 제대로 할당되지 않을 것을 알수 있습니다.
sniper2 머터리얼을 열어줍니다. Param 노드를 지우고 Texture Sample노드를 추가합니다.
좌측 Material Texture를 열어 sniper1_diffuse를 선택해줍니다.
그럼 다음과 같이 텍스쳐가 박스에 보입니다. Texture Sample을 하나더 추가하고 Sniper1_normal을 선택하고 normal에 연결합니다.
세이브하고 나가서 sniper1을 열어보면 머터리얼이 잘 적용된걸 알 수 있습니다.
총교체하기
새로가져온 스나이퍼건을 플레이어가 사용할 수 있도록 TPSPlayer.h에 변수를 추가합니다.
UPROPERTY(VisibleAnywhere, Category = GunMesh)
class UStaticMeshComponent* sniperGunComp;
TPSPlayer.cpp에 컴포넌트를 등록해줍니다.
// 5. 스나이퍼건 컴포넌트 등록
sniperGunComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("SniperGunComp"));
// 5-1. 부모 컴포넌트를 Mesh 컴포넌트로 설정
sniperGunComp->SetupAttachment(GetMesh());
// 5-2. 스태틱메시 데이터 로드
ConstructorHelpers::FObjectFinder<UStaticMesh> TempSniperMesh(TEXT("StaticMesh'/Game/SniperGun/sniper1.sniper1'"));
// 5-3. 데이터로드가 성공했다면
if (TempSniperMesh.Succeeded())
{
// 5-4. 스태틱메시 데이터 할당
sniperGunComp->SetStaticMesh(TempSniperMesh.Object);
// 5-5. 위치 조정하기
sniperGunComp->SetRelativeLocation(FVector(-22, 55, 120));
// 5-6. 크기 조정하기
sniperGunComp->SetRelativeScale3D(FVector(0.15f));
}
빌드한후 언리얼에디터가 로딩된후 BP_TPSPlayer를 확인해보면 총두자루가 잘 배치되어 있습니다.
이제 키1을 누르면 유탄총 2를 누르면 스나이퍼건이 사용되도록 처리하겠습니다.
InputAction IA_1 IA_2 를 만들고
IMC_Default에 1과2를 배정한후
TPSPlayer.h
public:
UPROPERTY(EditAnywhere, Category = "Input")
UInputAction* IA_1;
UPROPERTY(EditAnywhere, Category = "Input")
UInputAction* IA_2;
TPSPlayer.cpp
총의 변경의 visibility를 이용하여 하나의 총만 표시해줍니다.
void ATPSPlayer::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
{
.....
EnhancedInputComponent->BindAction(IA_1, ETriggerEvent::Triggered, this, &ATPSPlayer::ChangeToGrenadeGun);
EnhancedInputComponent->BindAction(IA_2, ETriggerEvent::Triggered, this, &ATPSPlayer::ChangeToSniperGun);
}
}
// 유탄총으로 변경
void ATPSPlayer::ChangeToGrenadeGun()
{
// 유탄총 사용 중으로 체크
bUsingGrenadeGun = true;
sniperGunComp->SetVisibility(false);
gunMeshComp->SetVisibility(true);
}
// 스나이퍼건으로 변경
void ATPSPlayer::ChangeToSniperGun()
{
bUsingGrenadeGun = false;
sniperGunComp->SetVisibility(true);
gunMeshComp->SetVisibility(false);
}
빌드후 BP_TPSPlayer블루프린트에서 IA_1 IA_2를 배정해줍니다.
플레이후 1 2 를 눌러보면 총이 바뀌는 것 처럼 보입니다.
BluePrints폴더에서 우클릭후 WidgetBlueprint를 만들고 이름을 WBP_sniperUI로 변경합니다.
위젯을 열고 Canvas Panel, Image를 추가하고 Anchors를 가운데로하고 위치를 0.5로 변경합니다. Shift+가운데 골라도 됩니다. 원래 이미지 사이즈가 되도록 SizeToContents를 선택하고
sniperscope 이미지를 선택해 줍니다.
컴파일후 저장합니다.
스나이퍼조준모드 전환하기
Ctrl키를 누를때 스나이퍼 조준모드로 전환되게 해보겠습니다. 이번에는 C++보다 우선 블루프린트로 구현해보겠습니다.
BP_TPSPlayer 블루프린트를 열어봅니다.
Create WBP 노드를 추가하고 Class를 WBP_SniperUI를 선택해줍니다.
Return Value점 위를 우클릭하고 변수로 승격해줘 저장해줍니다. 화면표시는 ctrl이 클릭되면 하도록하겠습니다.
이벤트그래프 우클릭후 ctrl로 검색해서 Left Ctrl 이벤트 노드를 추가해 줍니다.
Widget은 Add to viewport를 실행해야 화면에 표시됩니다. FOV를45도로 설정하여 Zoom이 되어 보이게 해줍니다.
'인생언리얼TPS' 카테고리의 다른 글
3.1-8 적Enemy생성하기 (0) | 2023.12.15 |
---|---|
3.1-7 스나이퍼모드 C++ (0) | 2023.12.15 |
3.1-6 총알발사하기 (0) | 2023.12.13 |
3.1-5 총알 제작하기 (0) | 2023.12.13 |
3.1-4 플레이어 이동 처리하기 (1) | 2023.12.12 |