본문 바로가기

게임프로그래밍/실습1

[언리얼 실습] 40. 액터를 부수면 아이템 스폰하기


목차

  1. 보물 클래스 만들기

1. 보물 클래스 만들기

 

아이템에 사용할 매시와 사운드를 구한뒤 이를 바탕으로 보물 클래스를 만들어보자.

 

 

아이템 클래스를 기반으로 보물 클래스를 만들 것이다.

 

// item.h

UFUNCTION()
virtual void OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);

 

클래스가 만들어졌으면 부모 클래스(아이템 클래스)에서 오버랩 이벤트 함수를 오버라이드 해서 사용해보자.

 

UCLASS()
class PRACTICE_API ATreasure : public AItem
{
	GENERATED_BODY()

protected:
	virtual void OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) override;
	
};

 

이제 이 함수를 정의할 것이다.

 

함수의 내용에는 아이템을 습득하면 코인(돈)을 늘려주고 습득 사운드를 재생할 것이다. 물론 현재 캐릭터 클래스에 코인 변수는 없으므로 추가해주어야 한다.

 

사운드를 재생하기 위해서 보물 클래스에 사운드를 담을 포인터를 추가해주자.

 

private:
	UPROPERTY(EditAnywhere, Category = "Sounds")
	USoundBase* PickupSound;

 

 

이제 사운드를 재생하는 일을 정의해보자.

void ATreasure::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
	AKnight* KnightCharacter = Cast<AKnight>(OtherActor);
	if (KnightCharacter)
	{
		if (PickupSound)
		{
			UGameplayStatics::PlaySoundAtLocation(this, PickupSound, GetActorLocation());
		}
		Destroy();
	}
}

 

보물과 캐릭터가 오버랩 되면 사운드가 재생되고 보물은 파괴된다.

 

이제 컴파일 하고 블루프린트 클래스로 만들어 이를 확인하면 된다.

 

이렇게 해서 보물을 만들기 위한 기반을 닦았다. 이제 다음에는 항아리를 부시면 보물이 나오는 등의 작업을 해보려고 한다.