포스트

UE5 C++ | Obstacle Assault, C++ 변수와 함수(유데미)

언리얼 강의 중 Section 3를 정리한 두번째 글입니다.

UE5 C++ | Obstacle Assault, C++ 변수와 함수(유데미)

강의 정보 🎓


UPROPERTY 변수 🧩

VS Code로 열어서 ObstacleAssault → Source를 확인하면 헤더파일과 소스파일을 볼 수 있다.

  • MovingPlatform 액터에 변수를 추가해 블루프린트 에디터에서 확인 하고 싶다.
  • 단순한 변수 선언 만으로는 에디터에 표시되지 않음:
1
int32 Myint = 99; // 에디터에 표시 안 됨
  • 아래와 같이 UPROPERTY(EditAnywhere)로 선언해야 표시됨:
1
2
UPROPERTY(EditAnyWhere)
int32 Myint = 99;

이런 수정을 수행하고 에디터를 매번 저장하고 닫고 언리얼 에디터를 키는 것은 매우 번거롭다. 아래 사진의 표시된 버튼을 누르면 C++코드를 다시 컴파일 하고 불러올 수 있다. → 이를 라이브 코딩이라 한다.

liveCoding.png

C++ 헤더의 초기 값은 기본 값이며, 블루프린트에서 값을 수정하면 해당 값으로 덮어쓰게 된다.


라이브 코딩 문제 ⚠️

  • 변수 추가 후 언리얼 에디터를 닫았다가 다시 열면, 변수가 사라지는 현상 발생 가능
  • 다시 컴파일하면 나타나지만, 수정한 값은 유지되지 않음

해결 방법

  • 에디터 저장 없이 닫고 VS Code에서 Ctrl + Shift + B로 빌드
  • 이후 언리얼 에디터를 다시 열면 이전 값이 유지됨

다른 라이브 코딩 문제 발생 시, 핫 리로드(Hot Reload) 방식으로 전환 가능

Edit → Editor Preferences → General → Live Coding 비활성화 후 재시작


C++ 파일 및 BeingPlay ▶️

  • BeginPlay() 는 게임 시작 시 자동으로 호출되는 함수
  • C++에서 BeginPlay 안에서 변수를 조작하거나 초기화 가능

예시:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 헤더
UPROPERTY(EditAnywhere)
int32 A = 5;

UPROPERTY(EditAnywhere)
int32 B = 10;

int32 Result;

// CPP
void AMovingPlatform::BeginPlay() 
{
    Super::BeginPlay();
    Result = A + B;
}

언리얼 에디터에서 A, B 값을 수정한 후 플레이 시 Result가 변경되는 것을 확인 가능


C++에서 구조체 사용하기 📐

다음은 구조체 FVector 변수를 생성하고 멤버 변수를 활용한 예시이다.

1
2
3
4
5
6
//MovingPlatform.h
UPROPERTY(EditAnyWhere)
FVector MyVector = FVector(1, 2, 3);

//MovingPlatform.cpp - BeginPlay()
MyX = MyVector.X;

C++에서 함수 호출하기 📣

1
SetActorLocation(FVector(1, 2, 3));
  • 단, MovingPlatform 액터에 Mesh 또는 Cube 컴포넌트가 있어야 위치 변경 가능하다.
  • 위치를 플레이어 앞에 두고 싶다면:
    • 플레이어 캐릭터 위치를 복사 → MyVector 값으로 붙여넣는다.

이렇게 하면 MovingPlatform이 플레이어 앞에 배치된다.

image.png


요약 및 느낀점 📝

  • VS Code에서 C++을 통해 변수를 클래스에 만들고 언리얼에서 확인하였다.
  • 또한 함수내에서 값을 처리하거나 함수를 불러와 플레이어 앞에 큐브를 두었다.

느낀점 💡 C++로 코드를 수정하고 언리얼 엔진으로 결과를 바로 확인 할 수 있으니 편리한 것 같다. 다양한 함수들을 활용할 수 있도록 얼른 익숙해져야 할 것 같다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.