UE5) 기타 소소한 팁들

BlueprintImplementableEvent

블루프린트에서 모든 함수 바디를 구현함.

구조체 파라미터는 반드시 참조로 전달해야 컴파일 에러 없음.

Construct에서 SpawnActor를 금함

경고문구출력됨. 동작하지 않음

ConstrutHelper 로 생성자에서 에셋 로드

FJsonObjectConverter 직렬화 주의점

FJsonObjectConverter::UStructToJsonObjectString 함수를 통해서 구조체를 Json으로 직렬화 할 경우, 내가 직렬화 하기 원하는 필드는 반드시 UPROPERTY 마크가 되어있어야 합니다.

Lambda사용 가능한 델리게이트

DECLARE_DELEGATE…

주의) 기존 델리게이트처럼 변수타입과 변수명을 콜론으로 구분하면 안 됨.

ex)

StaticMesh의 대략적인 크기

할당된 Static Mesh의 대략적인 크기가 필요할 때,

StaticMeshCompoent->Bounds 를 이용하면, 박스의 원점정보와 박스의 크기를 가져올 수 있다.

  • BoxExtent는 실제 길이의 반이기 때문에 x2 해서 사용하면 된다.

프로젝트 생성시 주의점

내부에 존재하는 클래스 이름과 동일한 프로젝트 명으로 정하지 마십시오.

개발에 문제는 없지만, 패키징시 이름 충돌로 문제가 생깁니다.

라이더 사용시 라이더 플러그인을 엔진에 설치하지 마세요

엔진이 아니라 게임폴더에 설치할 것. ….. 궁금하면 해보시던가

혹시나 설치해서 문제가 된 경우

언리얼엔진설치경로\UE_엔진버전\Engine\Plugins\Developer\RiderLink 삭제할 것.

레벨 인스턴스의 트렌스폼을 런타임중에 변경

LevelStreamingPtr->GetLoadedLevel()->ApplyWorldOffset(Offset,false);
GetWorld()->UpdateLevelStreaming();

레벨스트리밍 콜백사용

마우스 아래 오브젝트 가져오기

마우스 아래의 오브젝트를 가져오려면, 다음 함수를 사용하면 된다.

GetHitResultUnderCursor 혹은 GetHitResultUnderCursorForObjects

  • GetHitResultUnderCursor 이 함수는 트레이스 채널에 대해서만 감지 가능하다. 오브젝트 타입에 따라서 감지 불가능

  • GetHitResultUnderCursorForObjects 특정 오브젝트 타입을 가진 대상을 가져오고 싶다면 사용할 것.

배열 순회중 엘리먼트 제거에 대해서

배열을 순회하며 특정 엘리먼트를 찾아 지워야 할 때가 있음.

여기서 문제가 발생함

배열의 원소가 지워지면 자동적으로 빈 공간을 뒷 원소들이 당겨와서 할당하게 됨.

그러므로 순회중에 몇몇 원소를 놓치는 경우가 생길 수 있음.

이 문제를 해결하기 위하여, 거꾸로 순회하는것을 추천

뒷 원소들이 앞으로 이동하는 것이기 때문에,

역순회시 원소를 지우더라도 인덱스 번호에는 아무 문제가 없다

애님트렌지션과 블렌드 스페이스

블렌드 스페이스 플레이어를 애니메이션 인스턴스에 사용하고,

특정 조건에 따라서 블랜드 스페이스를 사용하는 스테이트를 빠져나가야 할 경우,

블렌드 스페이스 플레이어의 루프가 체크되어 있으면 빠져나가지 못 하므로,

루프를 끄도록 해야 합니다.

또한, 너무 짧은 시간에 많은 트렌지션이 일어나는 경우

애니메이션 스테이트에 설정된 이벤트들 중 들어오는 스테이트 이벤트가 무시당하는 경우가 있습니다.

이 경우, 완전히 블랜딩된 스테이트 이벤트를 사용하세요

언리얼 구조체와 TSharedPtr

구조체 내부에서의 공유포인터 사용

언리얼 구조체 내부에서 공유포인터를 사용하는것이 막혀있진 않다.

다만 다음 문제때문에 사용하기를 권장하지 않는다.

  • 언리얼 구조체는 복사와 대입연산자가 제한되어 있다.
    • 하지만 공유포인터를 사용하는 경우 따로 복사 및 대입 연산자를 정의해야 한다.
    • 정의하지 않는 경우 구조체가 소멸될 때, 문제가 생길 확률이 매우 높다.

때문에, 공유포인터를 사용하고 싶다면
구조체 내부에 UObject를 주고,
해당 오브젝트 내부에서 공유포인터를 사용하는 형식으로 우회해야 한다.

  • 참고로 UObject내에 공유포인터를 생성한 경우 오브젝트가 소멸될 때 공유포인터도 같이 날아가니까 주의할 것.

지오메트리 위에 데칼 사용

지오메트리에 데칼 머티리얼 을 올리면,

지오메트리 자체의 머티리얼 이 바뀌게 되는데,

엔진에서 제공하는 데칼액터를 사용하면 그냥 드래그 해서 올리는 것 보다는 불편하지만

지오메트리 위에 데칼을 입힐 수 있다.

  • 데칼 액터는 액터배치 -> 비주얼이펙트 텝에 있음.

천천히 밝아지는 현상(암순응)

포스트프로세스 -> 자동노출 변경