Properties

 

 

 


Properties

 

https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/GameplayArchitecture/Properties/

 

프로퍼티

게임플레이 클래스에 대한 프로퍼티 생성 및 구현 관련 레퍼런스입니다.

docs.unrealengine.com

 

 


log 찍기

 

https://wergia.tistory.com/122

 

[UE4] Programming - 로그 출력하기

로그 출력하기 작성버전 :: 4.20.3 로그는 개발중에 여러가지 피드백을 얻기 위해서 중요한 도구다. 그렇기 때문에 항상 새로운 언어, 새로운 엔진 등을 배울 때는 거기서 어떤 방식으로 로그를 출

wergia.tistory.com

 

 


 

BP_C01_Property

 

C01_Property.h

더보기
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "C01_Property.generated.h"
UCLASS()
class U2212_03_API AC01_Property : public AActor
{
GENERATED_BODY()
private:
UPROPERTY(EditAnywhere)
int A = 10;
UPROPERTY(EditDefaultsOnly)
int B;
UPROPERTY(EditInstanceOnly)
int C;
UPROPERTY(VisibleAnywhere, Category = "Property")
float D;
protected:
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Property")
int Variable = 10;
public:
AC01_Property();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
};
   
EditAnyWhere 이 프로퍼티는 Archetypes이나 Instance 양쪽의 프로퍼티 창에서 편집할 수 있습니다. 이 지정자는 어떤 "Visible" 지정자와도 호환되지 않습니다.
EditDefualtsOnly 이 프로퍼티는 프로퍼티 창에서 편집할 수 있지만, Archetypes 상에서만 가능합니다. 이 지정자는 어떤 "Visible" 지정자와도 호환되지 않습니다.
EditInstanceOnly 이 프로퍼티는 프로퍼티 창에서 편집할 수 있지만,  Archetypes 아닌 Instance 상에서만 가능합니다. 이 지정자는 어떤 "Visible" 지정자와도 호환되지 않습니다.

출처: 언리얼 공식문서 https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/GameplayArchitecture/Properties/Specifiers/.

 

 

 

C01_Property.cpp

더보기
#include "01_Spawn/C01_Property.h"
AC01_Property::AC01_Property()
: B(20)
{
PrimaryActorTick.bCanEverTick = true;
C = 30;
}
void AC01_Property::BeginPlay()
{
Super::BeginPlay();
FString str;
str.Append(GetActorLabel());
str.Append(" / A :");
str.Append(FString::FromInt(A));
str.Append(" / B :");
str.Append(FString::FromInt(B));
str.Append(" / C :");
str.Append(FString::FromInt(C));
GLog->Log(str);
}
void AC01_Property::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
D += DeltaTime; //게임시작부터 현재까지의 시간
}

 

 


 

C02_Mesh

 

 

UObject* obj = StaticLoadObject(UMaterialInstanceConstant::StaticClass(), nullptr, L"MaterialInstanceConstant'/Game/Materials/M_White_Inst.M_White_Inst'");
UMaterialInstanceConstant* material = Cast<UMaterialInstanceConstant>(obj);

 

UObject로부터 상속받은 모든 class들은 StaticClass()라는 함수를 가지고 있다.

 

 

C02_Mesh.h

더보기
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "C02_Mesh.generated.h"
UCLASS()
class U2212_03_API AC02_Mesh : public AActor
{
GENERATED_BODY()
private:
UPROPERTY(VisibleAnywhere)
class UStaticMeshComponent* Mesh;
public:
AC02_Mesh();
protected:
virtual void BeginPlay() override;
private:
UFUNCTION()
void SetRandomColor();
private:
class UMaterialInstanceDynamic* Material;
};

 

 

C02_Mesh.cpp

더보기
#include "01_Spawn/C02_Mesh.h"
#include "Global.h"
#include "Components/StaticMeshComponent.h"
#include "Materials/MaterialInstanceConstant.h"
#include "Materials/MaterialInstanceDynamic.h"
AC02_Mesh::AC02_Mesh()
{
//Mesh = CreateDefaultSubobject<UStaticMeshComponent>("Mesh");
//RootComponent = Mesh;
//CHelper.h에서 만든 CreateComponent사용. 2차 포인터이기 때문에 &mesh 주소로 받는다.
CHelpers::CreateComponent<UStaticMeshComponent>(this, &Mesh, "Mesh");
//ConstructorHelpers::FObjectFinder<UStaticMesh> mesh(L"StaticMesh'/Game/Meshes/Cube.Cube'");
//if (mesh.Succeeded())
// Mesh->SetStaticMesh(mesh.Object);
UStaticMesh* mesh = nullptr;
CHelpers::GetAsset<UStaticMesh>(&mesh, "StaticMesh'/Game/Meshes/Cube.Cube'");
Mesh->SetStaticMesh(mesh);
}
void AC02_Mesh::BeginPlay()
{
Super::BeginPlay();
UMaterialInstanceConstant* material = nullptr;
CHelpers::GetAssetDynamic<UMaterialInstanceConstant>(&material, "MaterialInstanceConstant'/Game/Materials/M_White_Inst.M_White_Inst'");
Material = UMaterialInstanceDynamic::Create(material, this); //material 생성
Mesh->SetMaterial(0, Material); //mesh에 material 할당
UKismetSystemLibrary::K2_SetTimer(this, "SetRandomColor", 1, true);
}
void AC02_Mesh::SetRandomColor()
{
Material->SetVectorParameterValue("Color", FLinearColor::MakeRandomColor());
}

 


 

참고사항) 언리얼은 모든 헤더가 미리 컴파일된 헤더로 취급된다. (4.18버젼 이후 동일)  

 

언리얼은 모든 헤더가 미리 컴파일된 헤더로 취급된다. (4.18버젼 이후 동일)

 

PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHS;

 

 


 

Global.h 

 

우리가 만든 미리 컴파일된 헤더. 앞으로 정의할 cpp에 넣어서 사용할 것이다.

 

Global.h

더보기
#pragma once
#include "Kismet/KismetSystemLibrary.h"
#include "Utilities/CHelpers.h"

 


 

 

 

 

 

 

 

UE2212_03

Contents  
01_Spawn    
     
C++ 클래스
U2212_03 Source
01_Spawn C01_Property.h .cpp
C02_Mesh.h .cpp
 
Utilities CHelpers.h .cpp

 
     
Global.h
U2212_03GameModeBase