이제 무기를 만들 차례이다.
TPS게임에서 무기는 소총, 권총, 칼 등 다양하게 존재하는데 우리는 소총만 생각해서 만들 것이다.(공부하는 거니까!)
1. 코드 생성
Weapon은 Actor이기 때문에 Actor를 부모클래스로 하는 C++ 클래스 파일을 만들자
그리고 Weapon을 부모 클래스로 하는 AssaultRifle C++ 클래스 파일도 생성하자
1
2
3
4
5
6
7
8
9
class TPS_PROTOTYPE_API AWeapon : public AActor
{
}
class TPS_PROTOTYPE_API AAssaultRifle : public AWeapon
{
}
게임에서 총 게임을 할 때 가장 기본적으로 필요한 정보는 아래와 같을 것이다.
- 탄약 개수
- 재장전 시간
그리고 코드로는 아래와 같이 작성할 수 있다.
총모델링은 스켈레톤 메시로 되어 있다.
그래서 class USkeletalMeshComponent* _skeletalMeshComponent 가 필요하다.
AWeapon 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
UCLASS()
class TPS_PROTOTYPE_API AWeapon : public AActor
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, meta = (AllowPrivateAccess = "true"))
class USkeletalMeshComponent* _skeletalMeshComponent;
public:
// Sets default values for this actor's properties
AWeapon();
inline int GetAmmoCount() { return _ammoCount; }
inline float GetReloadingDelayTime() { return _reloadingDelayTime; }
protected:
UPROPERTY(EditAnywhere,Category ="Weapon Properties", meta = (AllowPrivateAccess = "true"))
int _ammoCount = 30;
UPROPERTY(EditAnywhere, Category = "Weapon Properties", meta = (AllowPrivateAccess = "true"))
float _reloadingDelayTime = 3.f;
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};
1
2
3
4
5
6
7
8
// Sets default values
AWeapon::AWeapon()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
_skeletalMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Skeletal Mesh"));
_skeletalMeshComponent->SetupAttachment(GetRootComponent());
}
2. BP 생성
코드 생성 후 AssaultRifle C++ 파일 기반으로 BP 클래스를 생성해 주면 끝이다.
이후에 계속 개발을 진행하면서 필요한 내용들을 추가할 것이기 때문에 뒤의 글에서 수정되는 내용들도 확인해 보자!