Plants.h:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Plants.generated.h"
UCLASS()
class HOWTO_AUTOCAMERA_API APlants : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
APlants();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UFUNCTION(BlueprintCallable)
void LoopDo();
UPROPERTY(EditAnywhere)
UStaticMeshComponent* mesh;
UPROPERTY(EditAnywhere)
UStaticMesh* staticMesher;
};
Plants.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "Plants.h"
#include "PlantsBullet.h"
#include "Engine.h"
// Sets default values
APlants::APlants()
{
// 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;
mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyComponent"));
mesh->SetupAttachment(GetRootComponent());
static ConstructorHelpers::FObjectFinder<UStaticMesh> SphereVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
if (SphereVisualAsset.Succeeded()) {
mesh->SetStaticMesh(SphereVisualAsset.Object);
mesh->SetWorldScale3D(FVector(1.0f));
mesh->SetWorldLocation(FVector(0.0f, 0.0f, 50.0f));
}
}
// Called when the game starts or when spawned
void APlants::BeginPlay()
{
Super::BeginPlay();
FTimerHandle TimeHandle;
GetWorld()->GetTimerManager().SetTimer(TimeHandle, this, &APlants::LoopDo, .5f, true);
return;
}
void APlants::LoopDo() {
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("22"));
FTransform SpawnLocation = this->GetActorTransform();
GetWorld()->SpawnActor<APlantsBullet>(APlantsBullet::StaticClass(), SpawnLocation);
return;
}
// Called every frame
void APlants::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
PlantBullet.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "PlantsBullet.generated.h"
UCLASS()
class HOWTO_AUTOCAMERA_API APlantsBullet : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
APlantsBullet();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UFUNCTION(BlueprintCallable)
void DestroyMyself();
UPROPERTY(EditAnywhere)
UStaticMeshComponent *mesh;
UPROPERTY(EditAnywhere)
UStaticMesh* staticMesher;
};
PlantsBullets.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "PlantsBullet.h"
// Sets default values
APlantsBullet::APlantsBullet()
{
// 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;
mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyComponent"));
mesh->SetupAttachment(GetRootComponent());
static ConstructorHelpers::FObjectFinder<UStaticMesh> SphereVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
if (SphereVisualAsset.Succeeded()) {
mesh->SetStaticMesh(SphereVisualAsset.Object);
mesh->SetWorldScale3D(FVector(0.1f));
mesh->SetWorldLocation(FVector(0.0f, 0.0f, 50.0f));
}
}
// Called when the game starts or when spawned
void APlantsBullet::BeginPlay()
{
Super::BeginPlay();
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &APlantsBullet::DestroyMyself, 5.f, false);
}
void APlantsBullet::DestroyMyself() {
this->Destroy();
}
// Called every frame
void APlantsBullet::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FVector newLocation = this->GetActorLocation() + this->GetActorForwardVector() * 10;
FRotator newRotation = this->GetActorRotation();
this->SetActorLocation(newLocation);
}