// 게임이 시작되기 까지의 과정
1. 게임 앱의 초기화
UGameInstance::Init
2. 레벨에 속한 액터의 초기화
AActor::PostInitializeComponents
3. 플레이어의 로그인
AGameMode::PostLogin
4. 게임의 시작
AGameMode::StartPlay
AActor::BeginPlay
// 주요 컴포넌트 Component
StaticMesh Component
; 배경에 사용. 애니메이션이 없는 모델링 에셋(스태틱 메시)을 사용해 시각적인 기능과 물리적인 기능을 제공.
SkeletalMesh Component
; 캐릭터에 사용. 애니메이션 정보가 있는 모델링 에셋(스켈레탈 메시)을 사용해 시각적인 기능과 물리적인 기능을 제공.
Collision Component
; 구/박스/캡슐로 지정한 영역에 물리적인 긴으을 설정하기 위해 제공하는 모듈. 시각적 기능 없음.
Camera Component
; 현재 상황을 플레이어의 모니터 화면에 출력해주는 기능.
Audio Component
; 소리를 발생시키는 데 사용하는 기능.
Particle Component
; 파티클 시스템으로 설계된 이펙트를 화면에 보여주기 위한 기능.
Light Component
; 전구, 헤드라이트 등과 같이 물체에 광원 효과를 부여하는 기능.
Movement Component
; 물체에 특정한 움직임을 부여하는 기능.
// 리플렉션 시스템 마크업
UCLASS()
: 클래스의 리플렉션 데이터를 생성하게 한다.
USTRUCT()
: 구조체의 리플렉션 데이터를 생성하게 한다.
GENERATED_BODY()
: 해당 유형에 대해 생성되는 전체 필수 표준 코드로 대체한다.
UPROPERTY()
: UCLASS or USTRUCT 의 멤버 변수를 UPROPERTY 로 사용할 수 있게 한다.
UFUNCTION()
: UCLASS or USTRUCT 의 메서드를 UFUNCTION 으로 사용할 수 있게 한다.
// 마크업 부가 지정자
Blueprintable
: 클래스를 블루프린트로 확장시킬 수 있다.
BlueprintReadOnly
: 프로퍼티를 블루프린트에서 읽을 수는 있지만, 쓰기는 불가능하다.
BlueprintReadWrite
: 프로퍼티를 블루프린트에서 읽고 쓰기가 가능하다.
EditAnywhere
: 프로퍼티를 아키타입과 인스턴스의 프로퍼티 창에서 편집할 수 있습니다.
VisibleAnywhere
: 프로퍼티를 아키타입과 인스턴스의 프로퍼티 창에서 볼 수 있습니다.
Category
: 프로퍼티를 에디터의 디테일 뷰에서 어느 섹션 아래 나타나도록 할지를 정의한다. 정리용.
BlueprintCallable
: 함수를 블루프린트에서 호출할 수 있다.
// 언리얼 기본 값
바이트 : uint8
정수 : int32
실수 : float
문자열 : FString, FName
구조체 : FVector, FRotator, FTransform
*UPROPERTY 로 매크로 선언해주면 반드시 초기값을 보장 받는다.
// 언리얼 오브젝트가 되려면
#include "헤더이름.generated.h"
; 오브젝트 선언 마지막에 선언해야 한다.
언리얼 헤더 툴을 사용해 클래스 선언을 분석하고 실행 환경에 필요한 정보가 "헤더이름.generated.h" 으로 생성됨.
// new 대신 CreateDefaultSubobject 함수 사용
; Object = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("OBJECT"));
마지막 문자열 값은 액터에 속한 컴포넌트 구분을 위한 hash 값 생성에 사용된다.
// 상속받은 함수의 명확한 인지
virtual void Func() override;
; 자식 클래스에서 override 키워드 사용하기
// 시간 관련 함수들
GetWorld()->GetDeltaSeconds()
; 게임 프레임 시간
GetWorld()->GetTimeSeconds()
; 게임을 시작한 후 현재까지 경과한 시간
GetWorld()->GetUnpausedTimeSeconds()
; 사용자가 게임을 중지한 시간을 제외한 경과 시간
GetWorld()->GetRealTimeSeconds()
; 현실 세계의 경과 시간
GetWorld()->GetAudioTimeSeconds()
; 사용자가 게임을 중지한 시간을 제외한 현실 세계의 경과 시간
// 가비지 컬렉션
UCLASS() *마크업
class MyGCType : public UObject *UObject 파생 클래스여야 GC 활성화 됨.
{
GENERATED_BODY() *마크업
};
UCLASS() *마크업
class AMyActor : public AActor *Actor는 보통 GC 안됨. Destory() 함수를 호출해줘야 함.
{
GENERATED_BODY() *마크업
public:
UPROPERTY() *마크업
MyGCType* SafeObject;
MyGCType* NonSafeObject; *마크업 안해서 GC에 의해 소멸됨. 다음 GC 타임에.
AMyActor(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
SafeObject = NewObject<MyGCType>();
NonSafeObject = NewObject<MyGCType>();
}
};
* bool IsPendingKill() 메서드를 사용하여 GC 대기중인기 확인 가능.
UStructs 는 가비지 컬렉팅 불가능.
// ConstructorHelpers
ConstructorHelpers::FObjectFinder
: StaticLoadObject 를 사용해서 지정된 UObject 로의 레퍼런스를 찾는다. 보통 콘텐츠 패키지에 저장된 애셋을 레퍼런싱하는 데 사용됨.
ConstructorHelpers::FClassFinder
: 지정된 UClass 에 대한 레퍼런스를 찾는다.
// Character 모델이 Pawn 모델과 다른점.
CharacterMovementComponent를 사용한다.
FloatingMovement와 다르게,
점프와 중력을 반영한 움직임을 제공.
다양한 이동모드 설정 가능.(걷기, 기어가기, 날아가기, 수영하기 등)
멀티 플레이 네트워크 환경에서 캐릭터들의 움직임을 자동으로 동기화 한다.
// SpringArmComponent 는 언리얼 엔진에서 삼인칭 시점의 카메라 설정을 구현할 때 편리하게 사용할 수 있다.
// Collision
WorldStatic
: 움직이지 않는 정적인 배경 액터에 사용. 주로 스태틱메시 액터에 있는 스태틱메시 컴포넌트에 사용.
WorldDynamic
: 움직이는 액터에 사용. 블루프린트에 속한 스태틱메시 컴포넌트에 사용.
Pawn
: 플레이어가 조종하는 물체에 주로 사용. 캐릭터의 충돌을 담당하는 캡슐 컴포넌트에 설정.
Visibility
: 배경 물체가 시각적으로 보이는지 탐지하는 데 사용. 마우스로 물체를 선택하는 피킹 기능을 구현할 때 사용.
Camera
: 카메라 설정을 위해 카메라와 목표물 간에 장애물이 있는지 탐지하는 사용. GTA..
PhysicsBody
: 물리 시뮬레이션으로 움직이는 컴포넌트에 설정.