목차
- 랜덤 보물 만들기
- 항아리를 부시면 랜덤한 보물이 나오게 하기
1. 랜덤 보물 만들기
보물의 종류를 늘려보자. 보물의 종류를 늘리고 보물마다 주는 골드의 양을 다르게 할 것이다.
골드의 양을 다르게 하려면 먼저 골드의 존재가 있어야 한다. 비주얼 스튜디오로 돌아가자.
class PRACTICE_API ATreasure : public AItem {
private:
UPROPERTY(EditAnywhere, Category = "Treasure Properties")
int32 Gold;
}
골드의 양은 에디터에서 조절할 수 있게 하였다.
이제 보물들을 여러개 만들고 이 보물마다 골드의 양을 다르게 하고 싶다. 그렇게 하기 위해서는 여러 클래스가 필요할 것이다. 이제 현재 있는 블루프린트 클래스를 기반으로 자식 클래스들을 만들어보자.
C++를 기반으로 만드는 것이 아닌 블루프린트 기반으로 만드는 이유는 블루프린트단에서 공통적으로 추가한 사항을 갖고 싶기 때문이다. 클래스에 존재하는 모든 기능을 C++로만 만들면 비효율 적일 것이고 일부는 블루프린트로 만들 필요가 있을 것이다. 그렇기 때문에 베이스 블루프린트 클래스를 기반으로 자식 클래스들을 만들 것이다.
이제 자식 클래스를 만들어보자.
자식 클래스를 만들면 부모 클래스와 별다를 게 없는 것을 볼 수 있다. 하지만 자세히 살펴보자.
우상단의 부모 클래스가 블루프린트 클래스로 지정되어 있다.
또한 이벤트 그래프를 살펴보면 부모 클래스와 연결이 되어있는 것을 볼 수 있다.
이렇게 다양한 보물들을 만들고 이제 이것을 랜덤하게 스폰하는 법을 알아보도록 하자.
배열을 사용해서 이를 랜덤하게 스폰해볼 것이다.
2. 항아리를 부시면 랜덤한 보물이 나오게 하기
비주얼 스튜디오로 가보자.
class PRACTICE_API ABreakableActor : public AActor, public IHitInterface
{
// ...
private:
UPROPERTY(EditAnywhere, Category = "Breakable Properties")
TSubclassOf<class ATreasure> TreasureClass;
}
현재 보물을 이렇게 변수하나에만 담아서 소환하고 있다. 이제 이 단일 변수에서 배열로 바꾸어보려고 한다.
TArray를 사용할 것인데 탬플릿 타입으로 TSubclassOf<class ATreasure>를 줄것이다.
즉 다시할해 T배열의 타입은 TArray<TSubclassOf<class ATreasure>> 이 될것이다.
private:
UPROPERTY(EditAnywhere, Category = "Breakable Properties")
TArray<TSubclassOf<class ATreasure>> TreasureClasses;
이제 이것을 스폰하는 방법을 알아보자. cpp 파일로 가서 스폰할 것이다.
void ABreakableActor::GetHit_Implementation(const FVector& ImpactPoint)
{
UWorld* World = GetWorld();
if (World && TreasureClasses.Num() > 0)
{
FVector Location = GetActorLocation();
Location.Z += 75.f;
const int32 Selection = FMath::RandRange(0, TreasureClasses.Num() - 1);
World->SpawnActor<ATreasure>(TreasureClasses[Selection], Location, GetActorRotation());
}
}
0부터 배열의 수 - 1 사이의 숫자중 랜덤 숫자 하나를 뽑아 해당 배열에 있는 보물을 소환할 것이다. 이렇게 하면 배열의 인덱스를 벗어나 보물을 소환하려는 일 없이 제대로 보물을 소환할 수 있게 될 것이다.
이제 컴파일 하고 파괴가능한 액터의 블루프린트에 들어가 보물들을 설정해주자.
다양한 보물들이 제대로 소환되는 것을 볼 수 있다.
다음에는 항아리의 종류를 늘려볼 것이다.
'게임프로그래밍 > 실습1' 카테고리의 다른 글
[언리얼 실습] 44. 나이아가라 컴포넌트 모듈 추가하기 (0) | 2024.11.01 |
---|---|
[언리얼 실습] 43. 다양한 부실 수 있는 액터 만들기 (0) | 2024.11.01 |
[언리얼 실습] 41. C++에서 액터 스폰하기 & 부서진 액터랑 충돌방지 (0) | 2024.10.31 |
[언리얼 실습] 40. 액터를 부수면 아이템 스폰하기 (0) | 2024.10.31 |
[언리얼 실습] 39. 액터가 부셔질 때 효과음을 내고 사라지게 하기 (0) | 2024.10.31 |