[TIL] 2026-01-09 | C++ 문자 종류 판단, Actor 라이프 사이클, Transform, 리플렉션 시스템

2026. 1. 9. 21:16·내배캠Unreal_TIL/UE

1. WHAT

알고리즘 코드카타

 

  • 문자열 다루기 기본
#include <string>
#include <vector>
#include <cctype>

using namespace std;

bool solution(string s) {
    bool answer = true;
    if(!(s.size()==4 or s.size()==6))
        return false;
    for(char c:s){
        if(!isdigit(c))
            return false;
    }
    return answer;
}

- #include <cctype> : 문자의 종류 판단

  • isalnum(c): 알파벳, 숫자 > true
  • isalpha(c): 알파벳 > true
  • isblank(c): space,tab > true
  • isdigit(c): 숫자 (0~9) > true
  • isxdigit(c): 16진수 (0~9, A~F) > true
  • islower(c): 소문자 > true
  • isupper(c): 대문자 > true
  • isspace(c): 빈칸 > true
  • ispunct(c): punctuation 쉼표(,) 마침표(.) 등의 문장기호 > true
  • tolower(c): 소문자로 바꾸어주는 함수
  • toupper(c): 대문자로 바꾸어주는 함수

C++와 Unreal Engine으로 3D 게임 개발 1-5~7

- Log 카테고리 설정

// .h
DECLARE_LOG_CATEGORY_EXTERN(LogSparta, Warning, All); 
// 카테고리, 기본 출력 레벨, 컴파일 타임 출력 레벨

// .cpp
DEFINE_LOG_CATEGORY(LogSparta);

 

- Actor 라이프 사이클 함수

#include "Item.h"

DEFINE_LOG_CATEGORY(LogSparta);

// Sets default values
AItem::AItem()
{
    // 루트 컴포넌트 지정 ( 주로 SceneComponent )
    SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
    SetRootComponent(SceneRoot);

    // StaticMesh 컴포넌트 생성 및 루트에 부착
    StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
    StaticMeshComp->SetupAttachment(SceneRoot);

    // StaticMesh와 Material 에셋 로드 및 설정
    static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/Game/Resources/Props/SM_Potion_A.SM_Potion_A"));
    if (MeshAsset.Succeeded()) 
    {
        StaticMeshComp->SetStaticMesh(MeshAsset.Object);
    }
    static ConstructorHelpers::FObjectFinder<UMaterial> MatAsset(TEXT("/Game/Resources/Materials/M_Coin_B.M_Coin_B"));
    if (MatAsset.Succeeded())
    {
        StaticMeshComp->SetMaterial(0, MatAsset.Object);
    }

    UE_LOG(LogSparta, Warning, TEXT("%s Constructor"), *GetName());
}

void AItem::PostInitializeComponents()
{
    Super::PostInitializeComponents();

    UE_LOG(LogSparta, Warning, TEXT("%s PostInitializeComponents"), *GetName());
}

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

    UE_LOG(LogSparta, Warning, TEXT("%s BeginPlay"), *GetName());
}

void AItem::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

void AItem::Destroyed() 
{
    UE_LOG(LogSparta, Warning, TEXT("%s Destroyed"), *GetName());
    Super::Destroyed();
}

void AItem::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
    UE_LOG(LogSparta, Warning, TEXT("%s EndPlay"), *GetName());
    Super::EndPlay(EndPlayReason);
}

- FTransform 자료형

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

    SetActorLocation(FVector(300.0f, 200.0f, 100.0f));
    SetActorRotation(FRotator(0.0f, 45.0f, 0.0f)); // pitch, yaw, roll // y, z, x 회전
    SetActorScale3D(FVector(2.0f, 1.0f, 1.0f)); // 2.0f 만 넣으면 전체 크기 2배

    FVector NewLoc(300.0f, 200.0f, 100.0f);
    FRotator NewRot(0.0f, 45.0f, 0.0f);
    FVector NewScal(2.0f, 1.0f, 1.0f);

    FTransform NewTrans(NewRot, NewLoc, NewScal);
    SetActorTransform(NewTrans);
}

 

- pitch, yaw, roll

 

- 리플렉션

언리얼 엔진의 리플렉션 시스템은 C++ 클래스의 변수 및 함수 정보를 엔진 내부의 메타데이터 형태로 저장하고,

이를 에디터나 블루프린트에서 활용할 수 있게 만들어주는 기술

 

  • #include "Item.generated.h"
    • 언리얼 엔진이 자동 생성하는 헤더 파일로, 클래스의 리플렉션 및 엔진 통합에 필요한 코드가 들어 있습니다.
    • 반드시 헤더 파일의 가장 마지막 #include 구문 아래에 위치해야 합니다. (다른 #include보다 아래에 오지 않으면 빌드 에러 발생 위험이 있습니다.)
  • UCLASS()
    • 해당 클래스를 언리얼 엔진의 리플렉션 시스템에 등록한다는 의미입니다.
    • 이 매크로가 있어야만 블루프린트 등 에디터 차원에서 이 클래스를 인식하고 사용할 수 있습니다.
  • GENERATED_BODY()
    • 언리얼의 코드 생성 도구가 사용하는 코드를 삽입하는 역할을 합니다.
    • 클래스 내부에 필요한 리플렉션 정보를 자동으로 생성해 줍니다.

 

- UPROPERTY() 매크로의 주요 지정자

  • UPROPERTY()에는 여러 지정자를 작성해, 에디터에서의 표시 여부나 Blueprint 접근성, 읽기/쓰기 권한 등을 자세하게 설정할 수 있습니다. 아래는 자주 쓰이는 대표적인 지정자들입니다.
  1. 편집 가능 범위 지정자
    • VisibleAnywhere: 읽기 전용으로 표시되며, 수정은 불가능
    • EditAnywhere: 클래스 기본값, 인스턴스 모두에서 수정 가능
    • EditDefaultsOnly: 클래스 기본값에서만 수정 가능
    • EditInstanceOnly: 인스턴스에서만 수정 가능
  2. Blueprint 접근성 지정자
    • BlueprintReadWrite: Blueprint 그래프에서 Getter/Setter로 값을 읽거나 쓸 수 있습니다.
    • BlueprintReadOnly: Blueprint 그래프에서 Getter 핀만 노출되어, 읽기만 가능합니다.
  3. Category 지정자
    • Details 패널에서 이 변수는 “Rotation” 범주(폴더) 아래에 표시됩니다.
    • 여러 변수를 비슷한 카테고리에 묶으면, 세부 정보 패널에서 깔끔하게 정리되어 보입니다.
  4. 메타 옵션 지정자
    • meta=(ClampMin="0.0"): 에디터에서 변수 입력 시 최소값을 제한할 수 있습니다.
    • meta=(AllowPrivateAccess="true"): 해당 멤버가 private로 선언되어 있어도, 에디터나 Blueprint에서 접근할 수 있도록 허용합니다.
  • 만약 UPROPERTY()만 있고, 추가 지정자를 하나도 주지 않는다면?
    • 엔진 리플렉션 시스템에는 등록되지만, 에디터나 Blueprint에 노출되지는 않습니다.
    • “엔진이 변수의 존재는 알고 있지만, 외부에서는 보이지 않게 숨겨둔 상태”라고 볼 수 있습니다.
    • 리플렉션에 등록만 되어 있어도 가비지 컬렉션(메모리 관리)과 직렬화(세이브/로드) 같은 엔진 내부 기능이 작동할 수 있습니다.
// Root Scene Component, 에디터에서 볼 수만 있고 수정 불가
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Item|Components")
USceneComponent* SceneRoot;	
// Static Mesh, 에디터와 Blueprint에서 수정 가능
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Item|Components")
UStaticMeshComponent* StaticMeshComp;
	
// 회전 속도, 클래스 기본값만 수정 가능
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Item|Properties")
float RotationSpeed;

 

 

- UFUNCTION() 매크로의 주요 지정자

  • Blueprint 관련 지정자
    • BlueprintCallable
      • Blueprint 이벤트 그래프(노드)에서 호출(Execute) 가능한 함수로 만듭니다.
    • BlueprintPure
      • Getter 역할만 수행합니다. (Exec 핀 없이 Return Value만 노출)
    • BlueprintImplementableEvent
      • 함수의 선언만 C++에 있고, 구현은 블루프린트에서 하도록 합니다. C++ 코드에서는 함수 이름만 정의하고, 실제 동작은 Blueprint Event Graph 안에서 이벤트 노드처럼 구현됩니다.
  • 만약 UFUNCTION()에 지정자를 하나도 쓰지 않았다면?
    • UPROPERTY()와 마찬가지로, 함수가 언리얼 리플렉션에 등록되긴 하지만, 특별히 Blueprint에 노출되지는 않습니다.
    • “엔진이 함수의 존재는 파악하되, Blueprint에서 직접 호출할 수 없게 숨겨둔 상태”라고 보면 됩니다.
// 함수를 블루프린트에서 호출 가능하도록 설정
UFUNCTION(BlueprintCallable, Category="Item|Actions")
void ResetActorPosition();
		
// 블루프린트에서 값만 반환하도록 설정
UFUNCTION(BlueprintPure, Category = "Item|Properties")
float GetRotationSpeed() const;

// C++에서 호출되지만 구현은 블루프린트에서 수행
UFUNCTION(BlueprintImplementableEvent, Category = "Item|Event")
void OnItemPickedUp();

 

 

 

 

2. 참고

https://0-sunny.tistory.com/31

 

[C++ 기초] cctype 헤더파일

문자의 종류를 판단하는 함수를 제공 isalnum 알파벳이거나 10진수 해당하는 문자면 1 아니면 0 isalpha 알파벳이면 1 isblank space이거나 tab이면 1 isdigit 숫자(0~9)이면 1 isxdigit 16진수에 사용되는 숫자(0~9

0-sunny.tistory.com

https://kr.mathworks.com/help/robotics/ug/coordinate-systems-for-unreal-engine-simulation-in-robotics-system-toolbox.html

 

Coordinate Systems for Unreal Engine Simulation in Robotics System Toolbox - MATLAB & Simulink

Understand the world and robot coordinate systems when simulating in the Unreal Engine environment.

kr.mathworks.com

https://blog.naver.com/ideugu/221411002215

 

23. 3D 좌표계 (3D coordinate system)

안녕하세요. 2018년 (무려 4년전.. )에 연재한 상상하는 게임 수학에 설명한 내용을 모아 책으로 발간했습...

blog.naver.com

예전에 컴퓨터 그래픽스를 배울 때 좌표계 차이 때문에 계산하고 이런 기억이 어렴풋 난다.

 

'내배캠Unreal_TIL > UE' 카테고리의 다른 글

[TIL] 2026-01-13 | State Machine 설계를 통한 캐릭터 애니메이션 적용  (0) 2026.01.13
[TIL] 2026-01-12 | UE C++ 캐릭터 컨트롤  (0) 2026.01.12
[TIL] 2026-01-08 | 언리얼 엔진 기본 구조, 빌드 문제 해결, Actor 클래스에 컴포넌트 추가  (0) 2026.01.08
[TIL] 2025-12-24 | 과제 5 구현, 레벨 테스트 후기  (1) 2025.12.24
[TIL] 2025-12-22 | UE와 VS 충돌 ? 해결 및 언리얼 C++ 시작하기  (0) 2025.12.22
'내배캠Unreal_TIL/UE' 카테고리의 다른 글
  • [TIL] 2026-01-13 | State Machine 설계를 통한 캐릭터 애니메이션 적용
  • [TIL] 2026-01-12 | UE C++ 캐릭터 컨트롤
  • [TIL] 2026-01-08 | 언리얼 엔진 기본 구조, 빌드 문제 해결, Actor 클래스에 컴포넌트 추가
  • [TIL] 2025-12-24 | 과제 5 구현, 레벨 테스트 후기
윤윤씨
윤윤씨
🎮 내일배움캠프 Unreal 7기
  • 윤윤씨
    컴퓨터온열맛사지
    윤윤씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (63) N
      • 내배캠Unreal_TIL (63) N
        • C++ (23)
        • UE (31)
        • 팀프로젝트 (8) N
      • etc (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Solved.ac
    • YouTube
  • 태그

    챌린지
    머티리얼
    코드카타
    스테이트머신
    언리얼과제
    STL
    디자인패턴
    오토마타
    프로그래머스
    gas
    ta
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
윤윤씨
[TIL] 2026-01-09 | C++ 문자 종류 판단, Actor 라이프 사이클, Transform, 리플렉션 시스템
상단으로

티스토리툴바