아이템 설계 구조
- 아이템 인터페이스
- 부모 클래스(Item) : ItemType, DestoryItem(),
- 공통 코인 클래스 : PointValue
- 작은 코인 클래스
- 큰 코인 클래스
- 지뢰 클래스 : ExplosionDelay, ExplosionRadius, ExplosionDamage
- 회복 클래스 : HealAmount
PrimitiveComponent::OnComponentBeginOverlap.AddDynamic(UserObject, FuncName)
virtual void OnItemOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) override;
PrimitiveComponent::GetOverlappingActors(TArray<AActor*>& OverlappingActors)
AActor::Tags.Add(TEXT("JaeHoon"));
AActor::Tags.Add("Unreal Engine");
Actor->ActorHasTag("JaeHoon")
TSubclassOf<AActor> ItemClass;
BoxComponent::GetScaledBoxExtent()
UDataTable* ItemDataTable;
TArray<FItemSpawnRow*> AllRows;
ItemDataTable->GetAllRows(ContextString, AllRows);
TArray<AActor*> OverlappingActors;
UPrimitiveComponent::GetOverlappingActors(OverlappingActors);
UGameplayStatics::ApplyDamage(AActor* DamagedActor, float BaseDamage, AController* EventInstigator, AActor* DamageCauser, TSubclassOf<UDamageType> DamageTypeClass)
- 공격 대상 / 데미지 / 공격의 주체 / 데미지 유발 오브젝트 / 데미지 유형
AActor::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
UGameplayStatics::GetAllActorsOfClass(GetWorld(), ASpawnVolume::StaticClass(), FoundVolumes);
UObejctBaseUtility::IsA(ACoinItem::StaticClass())
TArray<>::IsValidIndex()
UGamePlayStatics::OpenLevel(GetWorld(), LevelMapNames[CurrentLevelIndex]);
UI 같은 경우는 PlayerController에서 관리
UUserWidget* HUDWidgetInstance;
if (UTextBlock* ScoreText = Cast<UTextBlock>(HUDWidgetInstance->GetWidgetFromName(TEXT("Score"))))
{
if(UMyGameInstance* MyGameInstance = Cast<UMyGameInstance>(GetGameInstance()))
{
ScoreText->SetText(FText::FromString(FString::Printf(TEXT("Score : %d"), MyGameInstance->TotalScore)));
}
}
FString CurrentMapName = GetWorld()->GetMapName();
if (CurrentMapName.Contains("MenuLevel"))
{
ShowMainMenu(false);
}
UWidget::RemoveFromParent();
UUserWidget::AddToViewport();
bShowMouseCursor = true;
SetInputMode(FInputModeUIOnly());
UFunction* PlayAnimFunc = WidgetInstance->FindFunction(FName("PlayGameOverAnim"));
WidgetInstance->ProcessEvent(PlayAnimFunc, nullptr);
ConstructorHelpers::FClassFinder<UUserWidget> WBP_HP("경로");
WidgetComp->SetWidgetSpace(EWidgetSpace::Screen);
WidgetComp->SetWidgetClass(WBP_HP.Class);
UParticleSystem* Particle;
USoundBase* Sound;
UGameplayStatics::SpawnEmitterAtLocation(World, ParticleSystem, Location, Rotation, true)
UGameplayStatics::PlaySoundAtLocation(World, Sound, Location)
GetWorld()->GetMapName()
GetWorld()->GetTimerManager()
GetLocalPlayer()
GetSubsystem()
GetCharacterMovement()
GetController() / GetFirstPlayerController()
GetGameState()
GetGameInstance()
GetUserWidgetObject()
GetWidgetFromName()
: Unreal Engine의 모든 클래스 계층의 최상위 클래스입니다. 엔진의 모든 클래스는 UObject
로부터 파생됩니다.
NewObject<>()
또는 SpawnActor<>()
함수로 인스턴스화합니다.UObject
기반 클래스는 Reflection System을 지원하며, 이는 런타임 타입 정보와 에디터에서의 편집 기능을 제공합니다.: UClass
는 Unreal의 클래스 메타데이터를 저장하는 클래스로, 클래스 자체에 대한 정보를 담고 있습니다. Unreal의 Reflection System을 통해 클래스의 속성과 함수를 탐색하고 조작할 수 있게 합니다.
StaticLoadClass()
함수로 클래스를 로드하여 타입 확인 및 객체 생성을 준비할 수 있습니다.: UBlueprintGeneratedClass
는 블루프린트가 컴파일되었을 때 생성되는 클래스로, 블루프린트 기반의 클래스 정의를 포함합니다. 블루프린트에서 작성된 모든 함수와 변수를 포함하여 실행 가능한 형태로 제공됩니다.
StaticLoadClass()
로 로드한 후 스폰하여 블루프린트 기반의 객체를 생성할 수 있습니다.참조 사이트
1. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/typed-object-pointer-properties-in-unreal-engine
2. https://igh01ti.tistory.com/34
3. https://velog.io/@whoamicj/UE5-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%95%A0%EC%85%8B-%EB%A1%9C%EB%94%A9-TSoftObjectPtr%EC%99%80-TSubclassOf%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
4. https://cru6548.tistory.com/42
5. https://velog.io/@whoamicj/UE5-%EC%96%B8%EB%A6%AC%EC%96%BC-%EC%97%94%EC%A7%84-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B2%B4%EA%B3%84-%EC%99%84%EB%B2%BD-%EB%B6%84%EC%84%9D-UObject-UClass-BlueprintGeneratedClass%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%99%80-%EA%B4%80%EA%B3%84