UE5/UE5 MultiPlayerGame

MultiPlayerGame) 19. 무기 시스템

PJNull 2022. 6. 21.
728x90
반응형

무기 시스템

 

무기는 게임에 있어서 캐릭터만큼이나 중요한 요소이다. 보통 무기를 구현할때는 enum을 이용하여 구현을 한다.

 

 

 

무기 액터 생성

 

 

먼저 무기로 쓸 액터를 생성하고,

액터 생성

 

기본적으로 필요한 컴포넌트들(스켈레톤,충돌에 필요한 컴포넌트)을 추가하고 오브젝트와 콜리젼 설정을 해준다.

 

//Weapon.h


private:

	UPROPERTY(VisibleAnywhere,Category="Weapon")
		USkeletalMeshComponent* WeaponMesh;
	
	
	UPROPERTY(VisibleAnywhere, Category = "Weapon")
		class USphereComponent* AreaSphere;

 

//Weapon.cpp

#include "Components/SphereComponent.h"

AWeapon::AWeapon()
{
 	PrimaryActorTick.bCanEverTick = false;
	bReplicates = true;//리플리케이션용 프로퍼티를 사용

	WeaponMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("WeaponMesh"));
	WeaponMesh->SetupAttachment(RootComponent);
	SetRootComponent(WeaponMesh);
	WeaponMesh->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Block);
   	WeaponMesh->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn,ECollisionResponse::ECR_Ignore);
	WeaponMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
	
    
    
	AreaSphere= CreateDefaultSubobject<USphereComponent>(TEXT("AreaSphere"));
	AreaSphere->SetupAttachment(RootComponent);
	AreaSphere->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);
	AreaSphere->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}


void AWeapon::BeginPlay()
{
	Super::BeginPlay();
	
	if (GetLocalRole() == ENetRole::ROLE_Authority)//로컬에 대한 통제권이 있다면
	{
		AreaSphere->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
		AreaSphere->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn,ECollisionResponse::ECR_Overlap);

	}
}

 

 

 

기본설정을 마쳤다면 enum class를 이용하여 무기상태를 생성해준다

 

 

 

Enum에 관한 글

 

 

C++복습) Modern C++/ enum class

열거형 C++에는 많은 자료형이 존재하는데, 열거형은 가능한 모든 값이 기호 상수로 정의되는 자료형이다. 이 열거형은 C++11이 나오기 전까지 enum(Unscoped Enum) 키워드를 통해 정의되었다. C++11에 들

pjnull.tistory.com

 

 

 

UEUM과 UMETA에 관한 글

 

 

All UENUM and UMETA Specifiers

Both main and meta specifiers, including undocumented ones.

benui.ca

 

 

 

//Weapon.h


UENUM(BlueprintType)
enum class EWeaponState :uint8
{
	EWS_Initial UMETA(DisplayName="Initial State"),
	EWS_Equipped UMETA(DisplayName="Equipped"),
	EWS_Dropped UMETA(DisplayName="Dropped"),
	
	
	EWS_MAX UMETA(DisplayName="DefaultMAX"),

};


private:
	UPROPERTY(VisibleAnywhere, Category = "Weapon")
		EWeaponState WeaponState;

 

 

그후 무기의 블루프린트를 생성하고, mesh를 설정해준다.

 

성공적으로 메쉬와 스피어가 생성됨
메쉬 설정

 

 

 

 

728x90
반응형

댓글