언리얼 오류 과정
언리얼 실행 과정에서 계속 프로젝트가 생성되지 않고, 컴파일이 안된다는 버그가 나온다.
비주얼 스튜디오 문제인가 싶어서 다시 삭제하고 설치하지만 계속 새 프로젝트 만들때 컴파일이 되지 않는다고 뜬다.
구글 서치로 계속 찾아본 결과 나와 비슷한 오류를 겪은 사람의 글이 나온거 같아서 참고해서 다시 설치해본다.
5.4 프로젝트를 더 이상 컴파일을 할 수가 없습니다.
Can't compile 5.4 Projects anymore, I need help.
So a while back I started getting this message from the engine whenever I tried creating a new project in unreal engine 5.4. C:\Program Files\Epic Games\UE_5.4\Engine\Source\Runtime\Core\Public\Experimental\ConcurrentLinearAllocator.h(31): error C4668: ‘
forums.unrealengine.com
해당 문제에서 비주얼 스튜디오에서 MSVC 버전을 최신 버전으로 제공해서 문제가 생긴 것이다. MSVC 버전을 14.38로 다운그레이드하니까 문제가 해결되었다!
언리얼 5부터는 비주얼 2022을 설치하는 것이 기본이다.
설치 과정에서 C++를 사용한 데스크톱 개발, .NET 데스크톱 개발, C++를 사용한 게임 개발 (Unreal Engine 설치 관리자, Unreal Engine 테스트 어댑터 체크 필수)를 체크해주면된다.
개별 구성 요소에서 MSVC v143 - VS 2022 C++ x64/x86 빌드 도구를 v14.38을 체크해줘서 설치해주면 된다.
쉽게 배우는 C++ 언리얼 엔진 3D 게임 개발 기초
#incldue "프로젝트 이름.generated.h 와 GENERATED_BODY()는 reflection이란 걸 사용하기 위해 사용된 것이다.
reflection이란? 프로그램이 자기 자신을 조사하는 기능이다. C++ 에서는 지원하지 않지만, 언리얼에서는 Unreal ProPertySystem을 지원한다. 대신 사용하기 위해서는 위의 코드를 작성해야된다.
그러나 Unreal ProPertySystem에 노출시키기 위해서는 class의 경우에는 UCLASS, 변수의 경우에는 UPROPERTY, 함수의 경우에는 UFUNCTION(함수이름) 등을 사용한다.
Unreal ProPertySystem을 사용해야되는 이유
1. 에디터의 노출
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Mesh, meta = (AllowPrivateAccess = "true"))
예시 코드이다. 프로퍼티 안에는 태그들이 존재하며 각 태그들은 어디서든 접근이 가능하고, 블루프린트로 읽기만 가능, 메시란 카테고리에 변수가 들어갈 것이라 선언, 메타는 추가적인 메타 데이터를 담고 있으며 private 선언된 변수여도 에디터 상에 노출시킨다.
2. 가비지 콜렉터
C++ 에는 포함되어있지 않지만, 언리얼에는 포함되어 있다. 쓸모없는 데이터를 정리하는 기능.
UPROPERTY로 등록을 해두면 사용중이라고 표현해둘 수 있다, 만약 표현이 안되어 있다면 데이터가 사용중인지 아닌지 판단이 어려워서 바로 제거된다.
사용중인 언리얼 데이터는 반드시 UPROPERTY를 통해 Unreal property 시스템에 노출시켜준다.
질문 : Int와 같은 데이터는 Unreal property 시스템에 노출이 필요한가?
에디터에서 수정해야될 때는 확인이 필요하기 때문에 그때만 노출시켜 주면 된다.
일일 코드
두 수의 합
#include <iostream>
using namespace std;
int solution(int num1, int num2) {
int answer = num1 + num2;
return answer;
}
두 수의 나눗셈
#include <iostream>
using namespace std;
int solution(int num1, int num2) {
int answer = 0;
answer = ((double)num1 / (double)num2) * 1000;
return answer;
}
각도기