UE5 C++ | Obstacle Assault, C++ 변수와 함수(유데미)
언리얼 강의 중 Section 3를 정리한 두번째 글입니다.
UE5 C++ | Obstacle Assault, C++ 변수와 함수(유데미)
강의 정보 🎓
- 강의명: Unreal Engine 5 C++ Developer: Learn C++ & Make Video Games
- 플랫폼: 유데미
- 현재 섹션: Section 3 - Obstacle Assault
- 주요 내용: C++ 코드를 활용하여 변수와 함수를 다루는 기초에 대해 배웠다.
UPROPERTY 변수 🧩
VS Code로 열어서 ObstacleAssault → Source를 확인하면 헤더파일과 소스파일을 볼 수 있다.
MovingPlatform
액터에 변수를 추가해 블루프린트 에디터에서 확인 하고 싶다.- 단순한 변수 선언 만으로는 에디터에 표시되지 않음:
1
int32 Myint = 99; // 에디터에 표시 안 됨
- 아래와 같이
UPROPERTY(EditAnywhere)
로 선언해야 표시됨:
1
2
UPROPERTY(EditAnyWhere)
int32 Myint = 99;
이런 수정을 수행하고 에디터를 매번 저장하고 닫고 언리얼 에디터를 키는 것은 매우 번거롭다. 아래 사진의 표시된 버튼을 누르면 C++코드를 다시 컴파일 하고 불러올 수 있다. → 이를 라이브 코딩이라 한다.
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
이 플레이어 앞에 배치된다.
요약 및 느낀점 📝
- VS Code에서 C++을 통해 변수를 클래스에 만들고 언리얼에서 확인하였다.
- 또한 함수내에서 값을 처리하거나 함수를 불러와 플레이어 앞에 큐브를 두었다.
느낀점 💡 C++로 코드를 수정하고 언리얼 엔진으로 결과를 바로 확인 할 수 있으니 편리한 것 같다. 다양한 함수들을 활용할 수 있도록 얼른 익숙해져야 할 것 같다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.