Unreal Engine 10

[Unreal Engine] Online Subsystem

Online Subsystem (온라인 서브시스템) 및 그 인터페이스는 Steam, Xbox Live, Facebook 등의 온라인 서비스 기능을 공통된 방식으로 액세스할 수 있는 방법을 제공합니다. 여러 플랫폼에 출시하거나 여러 온라인 서비스를 지원하는 게임을 만들 때, 온라인 서브시스템을 사용하면 개발자는 각 지원 서비스에 맞게 구성만 조정해 주면 됩니다. 언리얼 엔진의 Online Subsystem (OSS) 은 멀티플레이어나 온라인 기능을 제공하기 위한 추상화 계층(플러그인 프레임워크) 입니다. 쉽게 말해, 게임에서 "플랫폼별 온라인 서비스(Steam, Epic Online Services, PSN, Xbox Live 등)" 와 직접 맞붙지 않고, 공통된 인터페이스를 통해 온라인 기능을 다룰 수 ..

[Unreal Engine] Asset, Tsubclassof, CDO, staticclass

Asset : Blueprint, Sound 등Tsublclassof : 특정 클래스의 서브클래스의 타입정보CDO : 클래스의 기본 인스턴스staticclass : 메타데이터 (리플렉션) *리플렉션 : 런타임 내에서 클래스의 정보를 알게해주는것C++ 에는 없고 C#에 있는 기능이다. 그래서 엔진에 C# 파일들이 있는 것! UPROPERTY()를 붙인 변수를 엔진내에서 수정할 수 있는 것은 리플렉션 시스템 덕분.

[Unreal Engine] 프로젝트, 모듈, 플러그인 개념

프로젝트: 모듈, 플러그인 + 에셋(컨텐츠 폴더) 를 모두 포함하는 큰 단위. 모듈(Module): 헤더파일(.h) 와 실행파일 (.cpp) 를 포함하는 최소 단위모듈은 단독으로 unreal engine 에서 구성할수 없다. Plugin 또는 Project에 종속되어야 한다. 플러그인(Plug-in): 여러 모듈을 묶어서 구성할수있다.플러그인은 독자적으로 구성할수 없다.실험 적인 기능을 테스트하거나 외부 확장용으로 사용한다. 모듈과 플러그인 둘 다 uproject에서 등록을 해주어야한다. *언리얼 엔진에서 IMPLEMENT_PRIMARY_GAME_MODULE은 하나만 존재해야한다.! 없어서도 안된다.그 이후로는 IMPLEMENT_MODULE로 설정

[Unreal Engine] TObjectPtr vs Raw Pointer

TObjectPtr과 Raw Pointer 중 어떤 것을 사용해야 할까?-> TObjectPtr를 사용하자 이유1. UE5에서는 Raw 포인터 대신 TObjectPtr를 사용하는 것을 권장하고 있다. 2. TObjectPtr은 또한 포인터가 초기화되도록 보장한다. ( 새 포인터 변수를 생성하면 nullptr로 초기화하는 것을 잊어버릴 수 있다.)  예외 -> UFUNTION() UFunction은 인자로 TObjectPtr을 받을 수 없다. 이때는 Raw Pointer를 사용해야 한다.  [참고]https://forums.unrealengine.com/t/why-should-i-replace-raw-pointers-with-tobjectptr/232781/13

[Unreal Engine] 플레이어 로직을 Controller에? Pawn에?

플레이어 로직을 1. 모두 Pawn에 넣는다 -> 초보자에게 가장 쉬운 방법, 단순한 싱글 플레이 게임에 가능해 보인다. 2. Controller와 Pawn에 분할한다 -> 다양한 폰을 소유할 수 있다. (스타크래프트에서 부대 단위 명령)-> 플레이어가 죽을 때 마다 새 Pawn을 Spawn할 수 있다.-> 반대로 Pawn이 컨트롤러를 교체할 수 있다. (축구 게임에서 22명의 Pawn(선수)를 AI가 제어할 수도, 플레이어가 직접 제어할 수도 있다.)-> 멀티플레이어 게임에 사용된다.( A 플레이어의 클라이언트에는 B 플레이어 Controller가 없다...)  그럼 어떻게 분할해야 할까?정답은 없지만 어느정도의 기준점을 제시하였다. - 게임 모드 변수/설정(서버에서만 실행됩니다).게임모드 BP- 게임..

[Unreal Engine] 순수 가상 함수, PURE_VIRTUAL Macro

일반적으로 C++ 에서는 순수 가상함수를virtual void Foo() = 0;와 같이 선언한다.하지만 UClass에서 위와 같이 선언 시 오류가 발생한다. 언리얼에서 UObject는 추상화될 수 없다. (즉, 순수 가상함수를 선언할 수 없다.)UE가 CDO(Class Default Object)를 생성하려면 모든 UObject가 생성 가능해야 하기 때문. 대신 PURE_VIRTUAL 매크로를 사용하여 유사한 동작을 얻을 수 있다.// 추상클래스UCLASS(Abstract)class RPGPROJECT_API ACharacterBase : public ACharacter, public IHitInterface{ GENERATED_BODY()protected: //순수 가상함수 virtual void D..

[Unreal Engine] 언리얼 컨테이너 라이브러리 (UCL)

C++ 의 STL과는 다른 언리얼에서 사용하는 라이브러 다양한 라이브러리가 있는데 TArray, TMap, TSet이 제일 유용하게 쓰임 언리얼 엔진 특화 UObject 안정적 지원 가볍고 게임 제작 최적화 TArray https://docs.unrealengine.com/5.0/ko/array-containers-in-unreal-engine/ TArray 는 유형이 같은 다른 오브젝트(, 다른 말로 "element", 요소 내지 엘리먼트)를 순서대로 정리하여 소속시키는 것을 담당하는 클래스입니다. - STL 의 Vector와 유사. TMap https://docs.unrealengine.com/5.0/ko/map-containers-in-unreal-engine 맵의 유형은 두 가지, TMap 및 T..

[Unreal Engine] 언리얼 오브젝트 (UObject)

언리얼 오브젝트는 언리얼 엔진 내에서 객체를 쉽고 효율적으로 관리하기 위해 고안되었습니다. UObject 는 생성자 호출 전 초기화시 자동으로 0 으로 채워집니다. 클래스, UProperty, 네이티브 멤버 모두에게 전체적으로 벌어지는 일입니다. 그 이후 멤버는 클래스 생성자의 커스텀 값으로 초기화 가능합니다. CDO (Class Default Object) UClass 매크로는 UObject 에게 자신의 언리얼에서 기반으로 삼은 유형에 대해 설명해 주는 UClass 로의 레퍼런스를 넘겨줍니다. 각 UClass 는 Class Default Object, 줄여서 CDO 라 불리는 오브젝트를 하나 유지합니다. CDO 는 본질적으로 기본 "템플릿" 오브젝트로, 클래스 생성자에 의해 생성된 이후 변경되지 않습니..

[Unreal Engine] Documentation 모음

언리얼 엔진 공부에 기초가 될 Documentation   - 코딩표준 (클래스 체계, 명명 규칙, 표준 라이브러리 사용 등) https://docs.unrealengine.com/5.3/ko/epic-cplusplus-coding-standard-for-unreal-engine/ - 언리얼 엔진 용어https://docs.unrealengine.com/5.3/ko/unreal-engine-terminology/ - 캐릭터 인코딩https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/CharacterEncoding/ - FStringhttps://docs...