Unreal Engine, from C++ spawn Blueprint inherited from C++ class, very small example: Difference between revisions

From Andreida
(Created page with "=== Prepare Project === ==== Create Project ==== * Games / Blank ** C++ ** Desktop ** Maximum ** Starter Content: no ** Raytracing: no ** Location: your choice ** Project Name: ShowActor * Create ==== Change Map to Basic ==== When the UE-Editor is open: * File / New Level / Basic / Create * File / Save Current Level as ... / Basic01 * Edit / Project Settings / Maps & Modes / Editor Startup Map: Basic01 * Edit / Project Settings / Maps & Modes / Editor Game Default Map:...")
 
Line 37: Line 37:
class SHOWACTOR_API AMiniActor : public AActor
class SHOWACTOR_API AMiniActor : public AActor
{
{
GENERATED_BODY()
GENERATED_BODY()
public:
public:
Line 45: Line 45:
protected:
protected:


virtual void BeginPlay() override;
virtual void BeginPlay() override;


UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Mesh"))
UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Mesh"))
UStaticMesh* m_pMesh;
UStaticMesh* m_pMesh;


UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Scene Component Root"))
UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Scene Component Root"))
USceneComponent* m_pScRoot;
USceneComponent* m_pScRoot;


UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Static Mesh Component of Root"))
UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Static Mesh Component of Root"))
UStaticMeshComponent* m_pSmcRoot;
UStaticMeshComponent* m_pSmcRoot;
};
};
</pre>
</pre>

===== Source File =====
===== Source File =====
<pre>
<pre>

Revision as of 13:26, 6 May 2024

Prepare Project

Create Project

  • Games / Blank
    • C++
    • Desktop
    • Maximum
    • Starter Content: no
    • Raytracing: no
    • Location: your choice
    • Project Name: ShowActor
  • Create

Change Map to Basic

When the UE-Editor is open:

  • File / New Level / Basic / Create
  • File / Save Current Level as ... / Basic01
  • Edit / Project Settings / Maps & Modes / Editor Startup Map: Basic01
  • Edit / Project Settings / Maps & Modes / Editor Game Default Map: Basic01

Create Classes

Actor

  • Tools / New C++ Class
    • Parent Class: Actor
    • Name MiniActor
    • Create Class
Header File: MiniActor.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MiniActor.generated.h"

UCLASS(Blueprintable)
class SHOWACTOR_API AMiniActor : public AActor
{
  GENERATED_BODY()
	
public:	

	AMiniActor();

protected:

  virtual void BeginPlay() override;

  UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Mesh"))
  UStaticMesh* m_pMesh;

  UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Scene Component Root"))
  USceneComponent* m_pScRoot;

  UPROPERTY(EditAnywhere, Category = "Structure", meta = (DisplayName = "Static Mesh Component of Root"))
  UStaticMeshComponent* m_pSmcRoot;
};
Source File
#include "MiniActor.h"

AMiniActor::AMiniActor()
{
	m_pScRoot = CreateDefaultSubobject<USceneComponent>("Root");
	RootComponent = m_pScRoot;

	m_pSmcRoot = CreateDefaultSubobject<UStaticMeshComponent>("SmcRoot");

	FAttachmentTransformRules transformRule = FAttachmentTransformRules::SnapToTargetIncludingScale;
	m_pSmcRoot->AttachToComponent(RootComponent, transformRule);

	PrimaryActorTick.bCanEverTick = false;
}

void AMiniActor::BeginPlay()
{
	Super::BeginPlay();

	if (m_pMesh != nullptr)
	{
		m_pSmcRoot->SetStaticMesh(m_pMesh);
	}
}

Build

Now build the project. Nothing works so don't even try to test it in the UE-Editor, but the code should compile and link. This is a class that is complete as it is.