Spawn and delete fireballs using new keybinds
+ Follow UE4 example for spawning and destroying actors + https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/SpawnAndDestroyActors/ + This version uses hybrid C++ and Blueprints instead of doing one or the other + Functions to spawn and delete fireballs exposed by UFUNCTION() prefix
This commit is contained in:
40
Source/ThirdPerson/Private/ActorSpawner.cpp
Normal file
40
Source/ThirdPerson/Private/ActorSpawner.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
// All content (c) Shaun Reed 2021, all rights reserved
|
||||
|
||||
|
||||
#include "ActorSpawner.h"
|
||||
// Include the header file from the actor we want to spawn
|
||||
#include "BallActor.h"
|
||||
|
||||
// Engine includes
|
||||
#include "Components/BoxComponent.h"
|
||||
|
||||
// Sets default values
|
||||
AActorSpawner::AActorSpawner()
|
||||
{
|
||||
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("DefaultSceneRoot"));
|
||||
SpawnVolume = CreateDefaultSubobject<UBoxComponent>(TEXT("SpawnVolume"));
|
||||
SpawnVolume->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform);
|
||||
}
|
||||
|
||||
void AActorSpawner::SpawnActor()
|
||||
{
|
||||
// Get initial position and rotation, then spawn the actor
|
||||
FVector SpawnLocation = GetActorLocation();
|
||||
FRotator SpawnRotation = GetActorRotation();
|
||||
GetWorld()->SpawnActor<ABallActor>(SpawnLocation, SpawnRotation);
|
||||
}
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
void AActorSpawner::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
}
|
||||
|
||||
// Called every frame
|
||||
void AActorSpawner::Tick(float DeltaTime)
|
||||
{
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
}
|
||||
|
||||
60
Source/ThirdPerson/Private/BallActor.cpp
Normal file
60
Source/ThirdPerson/Private/BallActor.cpp
Normal file
@@ -0,0 +1,60 @@
|
||||
// All content (c) Shaun Reed 2021, all rights reserved
|
||||
|
||||
|
||||
#include "BallActor.h"
|
||||
|
||||
|
||||
#include "Components/SphereComponent.h"
|
||||
#include "Particles/ParticleSystemComponent.h"
|
||||
|
||||
// Sets default values
|
||||
ABallActor::ABallActor()
|
||||
{
|
||||
// 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;
|
||||
|
||||
|
||||
// Attach a sphere with the name 'Sphere'
|
||||
SphereComp = CreateDefaultSubobject<USphereComponent>(TEXT("Sphere"));
|
||||
// Attach a static mesh component with the name 'MeshComp'; etc..
|
||||
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));
|
||||
ParticleComp = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("ParticleComp"));
|
||||
|
||||
// Attach the sphere to the root position of this Actor and configure settings
|
||||
SphereComp->SetupAttachment(RootComponent);
|
||||
SphereComp->SetSimulatePhysics(true);
|
||||
SphereComp->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
|
||||
|
||||
// Attach the static mesh to the sphere
|
||||
StaticMeshComp->AttachToComponent(SphereComp, FAttachmentTransformRules::KeepRelativeTransform);
|
||||
// Attach the particle system to the static mesh
|
||||
ParticleComp->AttachToComponent(StaticMeshComp, FAttachmentTransformRules::KeepRelativeTransform);
|
||||
|
||||
// Set sphere radius to be smaller size in line with the static mesh (?)
|
||||
SphereComp->SetSphereRadius(16.0f * this->sizeScale);
|
||||
|
||||
StaticMeshComp->SetRelativeLocation(FVector(0.0f, 0.0f, -12.0f));
|
||||
StaticMeshComp->SetRelativeScale3D(FVector(0.25f, 0.25f, 0.25f));
|
||||
|
||||
static ConstructorHelpers::FObjectFinder<UStaticMesh>SphereMeshAsset(TEXT("StaticMesh'/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere'"));
|
||||
StaticMeshComp->SetStaticMesh(SphereMeshAsset.Object);
|
||||
|
||||
static ConstructorHelpers::FObjectFinder<UParticleSystem>ParticleCompAsset(TEXT("ParticleSystem'/Game/StarterContent/Particles/P_Fire.P_Fire'"));
|
||||
ParticleComp->SetTemplate(ParticleCompAsset.Object);
|
||||
}
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
void ABallActor::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Called every frame
|
||||
void ABallActor::Tick(float DeltaTime)
|
||||
{
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user