1. Actor Creation
Actor는 Level에 배치하거나 스폰할 수 있는 오브젝트의 기본 클래스이다
C++클래스를 생성할 때 부모클래스를 선택할 수 있다 이때 Actor Class를 선택하면 Actor를 상속받는 클래스를 만들 수 있다
Actor뿐만 아니라 수많은 엔진 클래스를 상속받을 수 있다 ex) Pawn, Character, UserWidget...
그 후 Next로 Class이름, 경로를 설정하면 된다
이와 같이 Solution탐색기에서 확인이 가능하다
이때 Build.cs파일은 프로젝트에 포함되는 모듈을 제어한다
아래는 ActorClass를 상속받았을 때 자동으로 생성되는 함수들이다
#pragma once //.h파일을 포함할 때 한번만 포함되도록 보장해주는 전처리 지시문이다
#include "CoreMinimal.h" //Actor가 일반적으로 필요로 하는 핵심 최소 기능을 포함한다
#include "GameFramework/Actor.h" //Actor클래스를 포함하기 위한 Actor.h
#include "Items.generated.h" //class가 Reflection System에 들어가기 위한 코드를 포함한다
UCLASS() //UCLASS매크로로 이 클래스는 Reflection System에 들어갈 수 있게된다
class STUDYUE_API AItems : public AActor //Actor를 상속받음, _API는 DLL혹은 동적으로 링크된 라이브러리에서 사용될 수 있도록 한다
{
GENERATED_BODY() //언리얼 오브젝트로 만든 클래스가 언리얼 시스템을 위한 추가적인 함수, Super:: 또는 ThisClass::와 같은 유용한 typedef를 사용할 수 있게 해준다
public:
AItems(); //기본 생성자
protected:
virtual void BeginPlay() override; //Actor로 부터 상속받은 가상함수 BeginPlay() Actor가 생성될 때 한 번 호출된다
public:
virtual void Tick(float DeltaTime) override; //Actor로 부터 상속받은 가상함수 Tick() 매 프레임마다 호출된다
};
#include "Items.h"
AItems::AItems()
{
PrimaryActorTick.bCanEverTick = true; //true로 Tick 활성화, false로 Tick 비활성화가 가능하다
}
void AItems::BeginPlay()
{
Super::BeginPlay(); //부모의 BeginPlay()호출
}
void AItems::Tick(float DeltaTime) //DeltaTime은 Frame과 Frame사이의 시간초이다
{
Super::Tick(DeltaTime); //부모의 Tick() 호출
}
//Super::함수이름(); 은 부모클래스의 함수를 호출한다는 의미이다, 부모의 virtual함수를 상속받아 override할 경우 Super::를 활용하자
2. Blueprint Creation
만든 Actor C++ Class는 BP Class로 만들어서 사용한다, 만든 BP Class는 C++ Actor Class를 상속받게 된다
(C++File 우클릭 -> Create Blueprint class based on Item으로 만들수도 있고 ContentBrowser 공백란에 우클릭 -> Blueprint Class로 만든 후 원하는 부모 클래스를 지정해서 만들수도 있다, BP Class이름은 BP_이름 으로 하는게 좋다)
이렇게 만든 BP Class들은 레벨에 배치할 수 있다
모든 Actor들은 기본적으로 컴포넌트 하나가 붙어있다 (RootComponent)
Component들과 Actor를 클릭하여 Detail에서 세부사항을 제어할 수 있다
BP Class를 열게 되면 Viewport, Construction Script, Event Graph가 존재한다
Viewport : BP Class의 컴포넌트들을 시각화 해주며 Gizmo조작, 카메라 조작이 가능하다
Event Graph : BP Node를 이용하여 프로그래밍 하는 시스템 그래프 (마찬가지로 BeginPlay, Tick 등 이벤트(C++의 Delegate)가 존재한다)
Construction Script : 게임 시작 전에 호출되는 노드이다 (ex) Detail값을 변경하면 이 노드가 호출된다)
PrintString : 원하는 String을 화면에 출력하는 노드이다 (Debuging 용으로 많이 사용된다, LogString은 화면이 아닌 OutputLog에 원하는 String을 띄워준다)
원하는 문자 (FString), Screen/Log에 띄울지 말지 (bool), 글자 색 (FColor), 지속시간 (float), Key (FName)으로 인자로 이루어져 있다
Key로 Print String을 제어할 수 있다 ex) Tick()에서 아주 많은 PrintString이 실행될 때 Key값을 1로 지정하면 모든 String이 출력되지 않고 새로운 String으로 계속 대체되어 1개만 나오게 된다
UE_LOG(LogTemp, Warning, TEXT("Begin Play Called")); //TEXT("")는 String Literal을 유니코드로 변환한다
//UE에서 String타입은 FString이다, FString Literal을 사용할때는 TEXT("")에 사용하길 권장한다
UE_LOG() : 원하는 value, String을 OutputLog에 출력할 수 있다
3. OnScreen Debug Message
if (GEngine) //GEnine은 전역 포인터 변수로 어디에서든 접근이 가능하다, nullptr Check 필수
{
GEngine->AddOnScreenDebugMessage(1, 60.f, FColor::Blue, FString("Item On Screen"));
//key, Duration, Color, String값을 매개변수로 사용한다
//FColor의 색들은 static 변수로 되어 있기때문에 클래스로 직접 접근이 가능하다
}
GEngine->AddOnScreenDebugMessage() : 원하는 value, String을 화면에 출력할 수 있다
Key (FName), Duration (float), Color (FColor), 원하는 문자열 (FString)으로 인자로 이루어져 있다
4. Formatting Strings
void AItems::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
//%f, %d, %s 등 다양한 format이 존재한다 (%f = float, %d = int, %s = string)
UE_LOG(LogTemp, Warning, TEXT("DelatTime : %f"), DeltaTime);
//여러개도 가능하며 format과 ,뒤의 값의 개수와 순서를 맞춰주어야 한다
}
이처럼 value값도 출력이 가능하다
void AItems::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (GEngine)
{
FString Message = FString::Printf(TEXT("DeltaTime : %f"), DeltaTime);
GEngine->AddOnScreenDebugMessage(1, 60.f, FColor::Blue, Message);
}
}
FString::Printf() : 원하는 값을 String Format으로 변경해준다 위의 예제에서는 DeltaTime : 값 자체를 FString Format으로 변경
FString Name = GetName();
FString Message = FString::Printf(TEXT("ObjName : %s"), *Name);
//String값을 %s에 넣으려면 *를 FString변수 앞에 붙여야한다 -> C스타일의 문자열인 TCHAR Array로 제공한다
//*는 FString Operator이다
GetName() : this Object의 이름을 FString으로 반환하는 함수 (Object의 이름은 중복될 수 없다)
'Unreal' 카테고리의 다른 글
6. Moving Object & Trig Function(삼각함수) (131) | 2023.12.08 |
---|---|
5. Actor Class & Debug(2) (42) | 2023.12.05 |
3. Reflection System (1) | 2023.11.18 |
2. Vector & Rotator & Trigonometry (0) | 2023.11.18 |
1. Getting Start Unreal Engine (2) | 2023.11.18 |