.h
: DECLARE_LOG_CATEGORY_EXTERN(카테고리 이름, 기본 심각도, All);
.cpp
: DEFINE_LOG_CATEGORY(카테고리 이름);
생성자 → PostInitializeComponents() → BeginPlay() → Tick() → (Destroy()) → EndPlay()
라이프 사이클 함수 구현할 때 [반드시] 부모의 라이프 사이클 함수(Super::~~~)를 호출해줘야 함
Actor는 Object와 다르게 Transform 정보가 있어 world에 배치가 가능하다고 했는데 사실은 루트 컴포넌트가 있어야 Transform 개념을 가지게 됨
Location(FVector), Rotation(FRotator), Scale(FVector)을 Transform(FTransform-구조체)으로 한번에 관리할 수 있음
Tick()은 매 프레임마다 실행이 되기 때문에 어떤 계산을 할 때 프레임에 의존적이게 되고, 이에 따라 컴퓨터의 성능에 많은 영향을 받기 때문에 게임 플레이의 형평성이 어긋나게 된다
달리기를 한다고 했을 때 (거리 = 속도 x 시간)
A(100FPS)와 B(10FPS)의 속도(10)가 같다고 가정하고 매 프레임마다 해당 속도만큼 움직인다고 하면
이를 방지하고 게임의 일관성을 유지하기 위해 DeltaTime을 계산할 때 곱해주는 방식을 사용한다 => 프레임 독립적 계산
DeltaTime : 이전 프레임에서 현 프레임까지 걸린 시간
달리기를 한다고 했을 때 (거리 = 속도 x 시간)
A와 B의 속도(10)가 같다고 가정하면 1초동안 움직인 거리는 10으로 같을 수 밖에 없다
다만 움직이는 과정을 몇 번 보여주는 지는 프레임에 달려있는 것
: 런타임 및 에디터에서 객체와 그 속성, 메서드, 클래스 구조 등을 동적으로 확인하고 다룰 수 있게 해주는 시스템
UHT(UnrealHeaderTool) : 리플렉션 시스템을 지원하는 헤더 파일을 찾아서 관련 정보를 수집하고 이걸 토대로 .generated.h
파일을 생성하는 툴
#include ".generated.h"
: 리플렉션 시스템을 지원하는데 필요한 헤더 파일, UHT에 의해 자동으로 생성
UCLASS()
: 해당 클래스를 리플렉션 시스템에 등록
GENERATED_BODY()
: UCLASS()와 쌍으로 사용되고 리플렉션 데이터를 자동으로 생성하기 위한 매크로
.generated.h
파일의 코드를 클래스에 붙여넣어 해당 클래스에 리플렉션 시스템이 잘 작동하도록 해줌UPROPERTY()
: 변수를 리플렉션 시스템에 등록
UFUNCTION()
: 함수를 리플렉션 시스템에 등록
BlueprintCallable
, BlueprintPure
, BrueprintImplementableEvent
가 있다회전하면서 위아래로 움직이고 크기도 변하는 액터를 만들어보았다
AddActorLocalOffset()
과 AddActorLocalRotation()
을 사용하면 액터의 위치와 회전 각각에 변화를 줄 수 있었는데, 크기를 조절하는 함수는 없고 AddActorLocalTransform()
함수가 있어 이 함수를 사용해보았다
조금 특이한 점이 위치와 회전의 변화는 내부적으로 multiply()
라는 함수를 통해 내가 NewTransform
으로 넘겨준 값만큼 이전 위치와 회전에서 더해서 이동/회전을 하도록하는데, 크기는 NewScale
로 정한 값이 그대로 지정되는 것이었다.
(AddActorLocalTransform()
함수 말고 SetActorLocation()
, SetActorRotation()
, SetActorScale3D()
함수들을 사용해서 트랜스폼 값을 변경하는 방법도 있다)
참조 사이트
1. https://forums.unrealengine.com/t/postinitializecomponents-vs-beginplay/62991/4
2. https://velog.io/@lee_raccoon/.generated.hGENERATEDBODY%EA%B0%80-%EB%AD%94%EB%8D%B0
3. https://www.jetbrains.com/help/resharper/Unreal_Engine__Code_Analysis.html#uht_integration
4. https://openmynotepad.tistory.com/112
5. https://rhksgml78.tistory.com/691
6. https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-header-tool-for-unreal-engine
7. https://forums.unrealengine.com/t/what-do-generated-body-and-generated-uclass-body-do/420793