Spawn in random location and fall

This commit is contained in:
Brandon Thomas
2021-02-17 04:21:41 -05:00
parent f440b28979
commit 5d9760447c
3 changed files with 13 additions and 28 deletions
@@ -12,16 +12,17 @@ ASpawnableActor::ASpawnableActor()
// You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
// Attach a mesh to the object.
static ConstructorHelpers::FObjectFinder<UStaticMesh> BaseMeshAsset(TEXT("StaticMesh'/Game/StarterContent/Props/MaterialSphere.MaterialSphere'"));
//static ConstructorHelpers::FObjectFinder<UStaticMesh> BaseMeshAsset(TEXT("StaticMesh'/Game/StarterContent/Props/MaterialSphere.uasset'"));
//UStaticMesh* Asset = BaseMeshAsset.Object;
BaseMesh = BaseMeshAsset.Object;
BaseMesh = BaseMeshAsset.Object;
BaseMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BaseMesh"));
BaseMeshComponent->SetupAttachment(RootComponent);
BaseMeshComponent->SetStaticMesh(BaseMesh);
BaseMeshComponent->SetSimulatePhysics(true);
}
ASpawnableActor::~ASpawnableActor()
@@ -42,18 +43,3 @@ void ASpawnableActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void ASpawnableActor::SetMesh()
{
// NB: Everything below segfaults
//BaseMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BaseMesh"));
//BaseMesh->SetupAttachment(RootComponent);
/*
static ConstructorHelpers::FObjectFinder<UStaticMesh> BaseMeshAsset(TEXT("StaticMesh'/Game/StarterContent/Props/MaterialSphere.MaterialSphere'"));
if (BaseMeshAsset.Object)
{
BaseMesh->SetStaticMesh(BaseMeshAsset.Object);
}*/
}
@@ -4,6 +4,8 @@
#include "Engine/World.h"
#include "UObject/Object.h"
#include "Math/UnrealMathUtility.h"
DEFINE_LOG_CATEGORY(SpawningActorLog);
@@ -37,11 +39,12 @@ void ASpawningActor::Tick(float DeltaTime)
void ASpawningActor::Spawn()
{
//SpawnActor<ASpawnableActor>(this, this);
float x = FMath::RandRange(-1000.0f, 1000.0f);
float y = FMath::RandRange(-1000.0f, 1000.0f);
float z = FMath::RandRange(-1000.0f, 1000.0f);
FTransform location;
FVector location(x, y, z);
FRotator rotation;
//GetWorld()->SpawnActor<ASpawnableActor>(ASpawnableActor::StaticClass(), &spawnLocation);
/*ASpawnableActor* spawnedActor = (ASpawnableActor*)GetWorld()->SpawnActor(
ASpawnableActor::StaticClass(),
@@ -54,11 +57,9 @@ void ASpawningActor::Spawn()
nullptr, // owner
nullptr // instigator
);*/
//ASpawnableActor* spawnedActor = (ASpawnableActor*)GetWorld()->SpawnActor<ASpawnableActor>(&spawnLocation);
// TODO(bt): This will memory leak.
ASpawnableActor* spawnedActor = (ASpawnableActor*)GetWorld()->SpawnActor(ASpawnableActor::StaticClass());
spawnedActor->SetMesh();
spawnedActor->SetActorLocationAndRotation(location, rotation, false, 0, ETeleportType::ResetPhysics);
}
@@ -20,8 +20,6 @@ public:
ASpawnableActor();
~ASpawnableActor();
void SetMesh();
/** Mesh to use */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SpawnableActor", meta = (AllowPrivateAccess = "true"))
class UStaticMeshComponent* BaseMeshComponent;