Hello,
I can compile my code but when I place it in the game and run it. Whole editor crashes.
This is the log:
Fatal error: [File:/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/CoreUObject/Private/UObject/Obj.cpp] [Line: 104] No object initializer found during construction. 0x00007efced8d7da1 libUE4Editor-SpawnTutorial-7506.so!ABarracks::BeginPlay() [/home/cagdas/Documents/Unreal Projects/SpawnTutorial/Source/SpawnTutorial/Barracks.cpp:21] 0x00007efd649f129d libUE4Editor-Engine.so!AActor::DispatchBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/Actor.cpp:3225] 0x00007efd65e35e48 libUE4Editor-Engine.so!AWorldSettings::NotifyBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/WorldSettings.cpp:251] 0x00007efd6517468c libUE4Editor-Engine.so!AGameStateBase::HandleBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/GameStateBase.cpp:176] 0x00007efd65dfda49 libUE4Editor-Engine.so!UWorld::BeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/World.cpp:3736] 0x00007efd6513ccd5 libUE4Editor-Engine.so!UGameInstance::StartPlayInEditorGameInstance(ULocalPlayer*, FGameInstancePIEParameters const&) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/GameInstance.cpp:408] 0x00007efd5e8b95c0 libUE4Editor-UnrealEd.so!UEditorEngine::CreatePIEGameInstance(int, bool, bool, bool, bool, bool, float) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:3324] 0x00007efd5e8b1d59 libUE4Editor-UnrealEd.so!UEditorEngine::PlayInEditor(UWorld*, bool, FPlayInEditorOverrides) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:2449] 0x00007efd5e8a5964 libUE4Editor-UnrealEd.so!UEditorEngine::StartQueuedPlayMapRequest() [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:1265] 0x00007efd5e1d43ed libUE4Editor-UnrealEd.so!UEditorEngine::Tick(float, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/EditorEngine.cpp:1640] 0x00007efd5ec3f082 libUE4Editor-UnrealEd.so!UUnrealEdEngine::Tick(float, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/UnrealEdEngine.cpp:400] 0x0000000000239256 UE4Editor!FEngineLoop::Tick() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Launch/Private/LaunchEngineLoop.cpp:3693] 0x0000000000241ad3 UE4Editor!GuardedMain(char16_t const*) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Launch/Private/Launch.cpp:176] 0x00007efd5cf50eba libUE4Editor-UnixCommonStartup.so!CommonUnixMain(int, char**, int (*)(char16_t const*)) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Unix/UnixCommonStartup/Private/UnixCommonStartup.cpp:245] 0x00007efd5c976b97 libc.so.6!__libc_start_main(+0xe6) 0x000000000022d029 UE4Editor!_start()
libUE4Editor-Core.so!FGenericPlatformMisc::RaiseException(unsigned int) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Core/Private/GenericPlatform/GenericPlatformMisc.cpp:411]
libUE4Editor-Core.so!FUnixErrorOutputDevice::Serialize(char16_t const*, ELogVerbosity::Type, FName const&) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Core/Private/Unix/UnixErrorOutputDevice.cpp:56]
libUE4Editor-Core.so!FOutputDevice::LogfImpl(char16_t const*, ...) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Core/Private/Misc/OutputDevice.cpp:71]
libUE4Editor-Core.so!FDebug::AssertFailed(char const*, char const*, int, char16_t const*, ...) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Core/Private/Misc/AssertionMacros.cpp:417]
libUE4Editor-CoreUObject.so!UObject::CreateDefaultSubobject(FName, UClass*, UClass*, bool, bool, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/CoreUObject/Private/UObject/Obj.cpp:104]
libUE4Editor-SpawnTutorial-7506.so!ABarracks::BeginPlay() [/home/cagdas/Documents/Unreal Projects/SpawnTutorial/Source/SpawnTutorial/Barracks.cpp:21]
libUE4Editor-Engine.so!AActor::DispatchBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/Actor.cpp:3225]
libUE4Editor-Engine.so!AWorldSettings::NotifyBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/WorldSettings.cpp:251]
libUE4Editor-Engine.so!AGameStateBase::HandleBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/GameStateBase.cpp:176]
libUE4Editor-Engine.so!UWorld::BeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/World.cpp:3736]
libUE4Editor-Engine.so!UGameInstance::StartPlayInEditorGameInstance(ULocalPlayer*, FGameInstancePIEParameters const&) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/GameInstance.cpp:408]
libUE4Editor-UnrealEd.so!UEditorEngine::CreatePIEGameInstance(int, bool, bool, bool, bool, bool, float) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:3324]
libUE4Editor-UnrealEd.so!UEditorEngine::PlayInEditor(UWorld*, bool, FPlayInEditorOverrides) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:2449]
libUE4Editor-UnrealEd.so!UEditorEngine::StartQueuedPlayMapRequest() [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:1265]
libUE4Editor-UnrealEd.so!UEditorEngine::Tick(float, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/EditorEngine.cpp:1640]
libUE4Editor-UnrealEd.so!UUnrealEdEngine::Tick(float, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/UnrealEdEngine.cpp:400]
UE4Editor!FEngineLoop::Tick() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Launch/Private/LaunchEngineLoop.cpp:3693]
UE4Editor!GuardedMain(char16_t const*) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Launch/Private/Launch.cpp:176]
libUE4Editor-UnixCommonStartup.so!CommonUnixMain(int, char**, int (*)(char16_t const*)) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Unix/UnixCommonStartup/Private/UnixCommonStartup.cpp:245]
libc.so.6!__libc_start_main(+0xe6)
UE4Editor!_start()
As you can see it mentions one of my classes/line which has CreateDefaultSubobject. I’ve searched it on the internet and found that I can only call it in the constructor. But I am already calling it in the constructor. And it compiles just fine. I don’t know what causes this error at the runtime.
This is my .h and .cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "Barracks.h"
// Sets default values
ABarracks::ABarracks()
{
// 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;
}
// Called when the game starts or when spawned
void ABarracks::BeginPlay()
{
Super::BeginPlay();
BuildingMesh = CreateDefaultSubobject<UStaticMeshComponent>("BuildingMesh");
SpawnPoint = CreateDefaultSubobject<UParticleSystemComponent>("SpawnPoint");
SpawnInterval = 10;
auto MeshAsset = ConstructorHelpers::FObjectFinder<UStaticMesh>(TEXT("Static Mesh '/Engine/BasicShapes/Cube.Cube'"));
if (MeshAsset.Object != nullptr) {
BuildingMesh->SetStaticMesh(MeshAsset.Object);
BuildingMesh->SetCollisionProfileName(UCollisionProfile::Pawn_ProfileName);
}
auto ParticalSystem = ConstructorHelpers::FObjectFinder<UParticleSystem>(TEXT("ParticalSystem '/Engine/Tutorial/SubEditors/TutorialAssets/TutorialParticleSystem'"));
if (ParticalSystem.Object != nullptr) {
SpawnPoint->SetTemplate(ParticalSystem.Object);
}
SpawnPoint->SetRelativeScale3D(FVector(0.5, 0.5, 05));
UnitToSpawn = AMyCharacter::StaticClass();
}
void ABarracks::SpawnUnit()
{
FVector SpawnLocation = SpawnPoint->GetComponentLocation();
GetWorld()->SpawnActor(UnitToSpawn, &SpawnLocation);
}
void ABarracks::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
Super::EndPlay(EndPlayReason);
GetWorld()->GetTimerManager().ClearTimer(SpawnTimerHandle);
}
// Called every frame
void ABarracks::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
.h file:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Runtime/Engine/Classes/Engine/CollisionProfile.h"
#include "Runtime/Engine/Classes/Particles/ParticleSystemComponent.h"
#include "MyCharacter.h"
#include "Barracks.generated.h"
UCLASS()
class SPAWNTUTORIAL_API ABarracks : public AActor
{
GENERATED_BODY()
public:
ABarracks();
virtual void BeginPlay() override;
virtual void Tick (float DeltaSeconds) override;
UPROPERTY()
UStaticMeshComponent* BuildingMesh;
UPROPERTY()
UParticleSystemComponent* SpawnPoint;
UPROPERTY()
UClass* UnitToSpawn;
UPROPERTY()
float SpawnInterval;
UFUNCTION()
void SpawnUnit();
UFUNCTION()
void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
UPROPERTY()
FTimerHandle SpawnTimerHandle;
};
Is this a bug related to UE4 or is there something wrong with my code. Even my code has issues I think it doesn’t makes sense to crash the whole Editor. I am running on Linux Mint btw. Self compiled. 4.21
Thank you for your help.