UClass 5

[언리얼 C++] 게임플레이 클래스 구현

모든 게임플레이 클래스는 클래스 헤더(.h) 파일에 GENERATED_BODY() 매크로를 작성해줘야 제대로 구현됩니다. 헤더 파일은 클래스와 클래스에 속한 모든 변수와 함수를 정의하며, 파일명은 구현중인 클래스 이름에서 A 또는 U 접두사를 빼는 것입니다. 즉, AActor 클래스에 대한 헤더 파일은 Actor.h입니다. 이와 같이 클래스 소스(.cpp) 파일명도 동일하게 작성하는 것이 좋습니다. Actor.h에 대한 구현부 소스 파일은 Actor.cpp가 될 것입니다. 에디터 내 "C++ 클래스 추가" 메뉴 옵션으로 생성된 클래스에 대해서는 자동으로 처리됩니다. 소스(.cpp) 파일은 C++ 클래스 선언을 포함하는 헤더(.h) 파일을 포함해야 하는데, 이 파일은 보통 자동 생성되지만 수동 생성할 수도..

[언리얼 C++] 게임플레이 클래스 생성

언리얼 엔진의 모든 게임플레이 클래스는 클래스 헤더(.h) 파일과 클래스 소스(.cpp) 파일로 이루어져 있습니다. 클래스 헤더에는 클래스와 그 멤버, 즉 변수와 함수에 대한 선언이 들어 있으며, 클래스 소스에는 함수의 구현을 통한 정의가 들어있습니다. 언리얼 엔진의 클래스에는 표준화된 작명 규칙이 있어서 클래스 이름의 첫글자, 다른 말로 접두사만 봐도 클래스의 종류를 바로 알 수 있습니다. 접두사 의미 A 스폰 가능한 게임플레이 오브젝트의 베이스 클래스에서 확장됩니다. 이들은 Actor로 월드에 바로 스폰 가능합니다. U 모든 게임플레이 오브젝트의 베이스 클래스에서 확장됩니다. 월드에는 바로 인스턴싱할 수 없으며, Actor에 속해야 합니다. 보통 Components와 같은 오브젝트입니다. 위 표는 게..

[언리얼 C++] 언리얼 오브젝트 처리 (2)

언리얼 엔진의 오브젝트 처리 시스템에 대한 설명은 [언리얼 C++] 언리얼 오브젝트 처리 (1) (tistory.com) 글을 참고하시기 바랍니다. 이 글에서는 오브젝트 처리 시스템이 제공해주는 기능들에 대해 설명하도록 하겠습니다. 1. 에디터 통합 UObject와 UProperty는 에디터에 인식되며, 에디터는 별도의 코드를 작성할 필요 없이 해당 값들을 자동으로 노출시킬 수 있습니다. 이는 선택적으로 블루프린트 비주얼 스크립팅 시스템으로의 통합이 가능합니다. 그리고 변수와 함수의 노출 및 접근 여부를 제어할 수 있는 여러가지 옵션이 존재합니다. 프로퍼티 지정자 효과 BlueprintCallable 멀티캐스트 델리게이트 전용입니다. 프로퍼티를 노출시켜야 블루프린트 코드에서 호출할 수 있습니다. Blue..

[언리얼 C++] 언리얼 오브젝트 처리 (1)

언리얼 엔진에는 내부적으로 게임 오브젝트를 처리하는 견고한 시스템이 존재합니다. 이러한 오브젝트 처리 시스템의 도움을 받아 더욱 쉽고 간편하게 오브젝트를 관리할 수 있습니다. 제작한 클래스에서 오브젝트 처리 시스템의 기능들을 사용할려면, 시스템이 해당 클래스를 인식하게 해서 접근할 수 있도록 만들어줘야 합니다. 클래스는 UCLASS() 매크로, 프로퍼티는 UPROPERTY() 매크로, 함수는 UFUNCTION() 매크로를 사용하여 선언을 해주면 오브젝트 처리 시스템에서 인식하여 접근할 수 있게 됩니다. 이제 오브젝트 처리 시스템이 오브젝트에 접근하여 수행하는 여러가지 기능들에 대해 설명하도록 하겠습니다. 1. 자동 프로퍼티 초기화 UObject는 생성자 호출 전 초기화시 자동으로 0으로 채워집니다. 클래..

[언리얼 C++] TSubclassOf 템플릿 클래스

TSubclassOf는 UClass 타입의 안전성을 보장해주는 템플릿 클래스입니다. 예를 들어 디자이너가 파티클 타입을 지정하도록 해주는 클래스를 제작 중이라 가정합시다. UPROPERTY(EditDefaultsOnly, Category=Particle) UClass* ParticleType; 위 예제 코드처럼 그냥 UPROPERTY 타입의 UClass를 만든 다음 디자이너에게 UParticleSystemComponent의 파생 클래스만 할당하라고 가이드할 수 있습니다. 하지만 이렇게 하면 실수로 다른 클래스를 할당하는 것을 막을 수 없습니다. 이러한 상황에서, TSubclassOf 템플릿을 사용하여 클래스 할당의 선택지를 제한시킬 수 있습니다. UPROPERTY(EditDefaultsOnly, Cate..