.h:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "RotationAroundAc.generated.h"
UCLASS()
class FLOATINGCUBE_API ARotationAroundAc : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ARotationAroundAc();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UStaticMeshComponent* Child1;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UStaticMeshComponent* Father;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
class USpringArmComponent* CameraSpring;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int ZRotation;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int ZoomRotation;
UFUNCTION(BlueprintCallable)
void DestroyMyself();
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float destroyTime;
};
.cpp:
// Fill out your copyright notice in the Description page of Project Settings.
#include "RotationAroundAc.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/SpringArmComponent.h"
#include "GameFramework/Actor.h"
#include "CoreMinimal.h"
#include "Engine.h"
// Sets default values
ARotationAroundAc::ARotationAroundAc()
{
// 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;
Father = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("FatherAc"));
CameraSpring = CreateDefaultSubobject<USpringArmComponent>(TEXT("Spring"));
RootComponent = Father;
CameraSpring->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 0.0f), FRotator(-60.0f, 0.0f, 0.0f));
Child1 = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Child1"));
Child1->SetupAttachment(CameraSpring, USpringArmComponent::SocketName);
Child1->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 0.0f), FRotator(0.0f, 0.0f, 0.0f));
CameraSpring->TargetArmLength = 50.0f;
CameraSpring->bEnableCameraLag = true;
CameraSpring->CameraLagSpeed = 3.0f;
CameraSpring->SetupAttachment(Father);
ZRotation = 0;
ZoomRotation = 10;
destroyTime = 10.0f;
}
void ARotationAroundAc::DestroyMyself() {
Child1->DestroyComponent();
return;
}
// Called when the game starts or when spawned
void ARotationAroundAc::BeginPlay()
{
Super::BeginPlay();
FTimerHandle TimeHandle;
GetWorld()->GetTimerManager().SetTimer(TimeHandle, this, &ARotationAroundAc::DestroyMyself, destroyTime, true);
}
// Called every frame
void ARotationAroundAc::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
ZRotation += ZoomRotation;
CameraSpring->SetWorldRotation(FRotator(0.0f, ZRotation, 40.0f));
}