Namide

C++ UE4

Quelques bouts de code C++ pour l'Unreal Engine 4.

Récupérer un Actor dans le niveau

for (TActorIterator<ACameraActor> ActorItr(GetWorld()); ActorItr; ++ActorItr)
{
    ACameraActor* cam = Cast<ACameraActor>(ActorItr->_getUObject() );
    SetViewTarget( cam );
}

Ajoute un message à l'écran

Exemple Doc
//#include "Engine.h"
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, "Alerte de collision !");

Temps écoulé depuis le lancement

float time = UGameplayStatics::GetRealTimeSeconds(GetWorld());

Event dispatcher

Dans la classe (ACustomGameMode) qui diffuse l'évênement

//dans le .h avant la déclaration de classe
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FScoreDelegate, int32, Score);

// Dans le .h dans les propriétées publiques :
UPROPERTY(BlueprintAssignable, Category = "Main")
    FScoreDelegate OnScoreChange;

// Dans le .cpp pour diffuser l'évênement :
OnScoreChange.Broadcast(Score);

Dans la classe (ACustomScore) qui s'abonne à l'évênement

// Dans le .h dans les propriétées protégées
protected:
    void EndPlay(const EEndPlayReason::Type EndPlayReason) override;

// Dans le .cpp ajout d'un écouteur
void ACustomScore::BeginPlay()
{
    Super::BeginPlay();
    //Score = 0;

    ACustomGameMode* Cgm = Cast<ACustomGameMode>(GetWorld()->GetAuthGameMode());
    if (Cgm)
    {
        Cgm->OnScoreChange.AddDynamic(this, &ACustomScore::OnScoreChange);
    }
}

// Dans le .cpp suppression de l'écouteur
void ACustomScore::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
    ACustomGameMode* Cgm = Cast<ACustomGameMode>(GetWorld()->GetAuthGameMode());
    if (Cgm)
    {
        Cgm->OnScoreChange.RemoveDynamic(this, &ACustomScore::OnScoreChange);
    }
    Super::EndPlay(EndPlayReason);
}

Ajout d'un évênement appelable avec une classe héritée Blueprint

UFUNCTION(BlueprintImplementableEvent, Category = Score)
    void OnScoreChange(int32 Score);

Désactiver un Actor

Créer une pool d'objets (Actor)
actor->SetActorHiddenInGame(!active);
actor->SetActorEnableCollision(active);
actor->SetActorTickEnabled(active);
TInlineComponentArray<UActorComponent*> Components;
actor->GetComponents(Components);
for (int32 CompIdx = 0; CompIdx<Components.Num(); CompIdx++)
{
    Components[CompIdx]->SetComponentTickEnabled(active);
}

Créer un .gitignore

#############
## UE4
#############

Binaries
DerivedDataCache
Intermediate
Saved

#############
## OS detritus
#############

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Mac crap
.DS_Store