언리얼 114

언리얼 에디터에서 C++ 클래스 생성 시에 폴더별로 분류하는 방법

1) 문제점언리얼 에디터에서 클래스를 생성하면 자동으로  위와 같이 분류해줍니다. 하지만, 프로젝트의 규모가 커지면 커질수록 클래스의 수가 많아지고 어느새부터 분류하기가 힘들어집니다. 따라서 클래스 생성전에 폴더를 정하고 해당 폴더의 위치에 클래스를 생성하게 됩니다.  위와 같이 폴더를 생성하고 폴더선택을 통해폴더 안에 클래스를 만들고자 합니다.  하지만 이 경우에 빌드 에러가 발생하는 것을 확인할 수 있습니다.언리얼 에디터를 끄고 코드 에디터를 확인해보면 정상적으로 클래스가 생성된 것을 확인할 수 있지만,코드 에디터에서 빌드를 진행해도 마찬가지로 빌드 에러가 발생하는 것을 확인할 수 있습니다.  이러한 일이 발생하는 이유는 언리얼 엔진이 해당하는 폴더의 위치를 인식하지 못하기에 발생합니다.즉, 설계자인..

언리얼 C++ - 컴포지션

이번 포스트에서는 언리얼 C++에서 사용하는 설계 기법 중 하나인 컴포지션에 대해 알려드리겠습니다.거두절미하고 바로 시작하겠습니다. 1) Is - A VS Has - A우리가 클래스를 사용하는 이유는 보다 확실한 객체 지향 설계를 이뤄내기 위해 사용합니다.그런 점에서 Is-A를 통한 상속 관계의 파악은 객체 지향 설계에서 매우 중요합니다. 하지만, Is-A관계만으로는 클래스의 설계와 유지보수가 매우 힘듭니다.아주 간단한 개념으로 생각해보겠습니다.우리가 RPG 게임을 만든다고 가정할 때, 플레이어는 직업을 선택해야 합니다.직업간의 관계는 상속을 통한 클래스들로 만들어 나갈 수 있습니다. 그렇지만, 직업별로 사용하는 무기나 스킬은 어떻게 구성되야 할까요?분명히 각 직업에 알맞은 무기나 스킬이 존재하고 플레이..

언리얼 C++ - 인터페이스

이번 포스트에서는 언리얼 C++이 일반적인 C++과 다른 차이점 중 하나인 인터페이스에 대해 알아보겠습니다. 1) 인터페이스란?인터페이스는 다음과 같이 설명할 수 있습니다. 객체가 반드시 구현해야 할 행동을 지정하는 데 활용되는 타입다형성의 구현, 의존성이 분리된 설계에 유용하게 활용의존성을 분리함으로써 클래스 간의 종속성을 낮춤이러한 인터페이스는 추상클래스와 비슷하게 보일 수 있지만, 추상 클래스에서는 불가능한 다중 상속이, 인터페이스에서는 허용되는 등의 분명한 차이점이 존재합니다.그리고 이러한 인터페이스는 C++에서는 제공되지 않지만, 더 최신화된 객체지향 언어인 Java나 C# 등에서는 제공되는 기능이기도 합니다. 2) 언리얼 C++ 인터페이스의 특징정리하면 다음과 같습니다. (1) 언리얼 엔진에서..

언리얼 C++ - 언리얼 리플렉션 시스템의 활용

저번 포스트에서는 CDO를 통한 언리얼 오브젝트의 활용을 알아보았습니다.이번 포스트에서는 간단한 예제로 언리얼 리플렉션 시스템을 활용하는 방법을 알아보겠습니다. 1) 클래스의 구성 클래스는 위와 같이 구성되며PlayerPawn은 플레이어의 역할을, NPCPawn은 NPC의 역할을 수행하게 됩니다. 2) NonEnemyPawn 클래스 부모 클래스인 NonEnemyPawn은 위와 같이 구성되어 있습니다.생성자와 DoAction() 메서드 그리고 Getter와 Setter를 만들어 캡슐화를 적용하였습니다.또한 상속받을 클래스에서도 갖고 있어야 하는 요소들에는 UFUNCTION()과 UPROPERTY() 지시자를 사용해언리얼 엔진에서 상속받는 클래스들에서도 같은 구조로 만들어주게끔 설계하였습니다.  생성자와 D..

언리얼 C++ - 언리얼 오브젝트 리플렉션 시스템 ~ CDO

언리얼 엔진은 성능과 안정성을 모두 얻기 위해 자체적인 시스템을 구축하여 이루어졌습니다.그중에서도 리플렉션 시스템은 언리얼 엔진의 근간을 이루는 아주 중요한 부분입니다. 1) 언리얼 오브젝트 리플렉션 시스템이란?리플렉션 시스템은 프로그램이 실행시간에 자기자신을 조사하는 기능을 말합니다.이 기능을 사용하기 위해서는 언리얼 엔진에서 지정한 UENUM(), UCLASS()과 같은 매크로를 수식해줘야 합니다. 매크로가 수식되면 UHT(언리얼 헤더 툴)에 의해 이 매크로들이 분석되고 자동적으로 리플렉션 시스템에 필요한 소스코드들을 생성해줍니다. 이렇게 생성된 소스코드들로 구성된 요소는 언리얼 엔진의 관리 대상이 되는 언리얼 오브젝트로서 작동하게 됩니다. 2) 언리얼 오브젝트의 구성언리얼 오브젝트에서는 특별한 매크..

언리얼 C++ - 언리얼의 문자열

현대의 컴퓨터에서 문자열을 처리하는 방식은 MBCS(Multi Byte Character Set)과 WBCS(Wide Byte Character Set)로 나뉘어 있는 유니코드 방식입니다 그 중에서도 언리얼 엔진에서는 후자인 UTF-16을 사용합니다. 이때 언리얼 엔진에서는 편의성과 일관성을 유지하기 위해 문자열에 대해 다음과 같은 특징을 갖고 있습니다. 1) 언리얼 엔진에서의 문자열의 특징2byte의 균일한 사이즈로 문자를 처리하는 UTF-16을 사용문자열은 반드시 TEXT 매크로를 사용해 지정문자열을 다루기 위한 클래스로 FString을 제공언리얼 엔진에서의 문자열의 특징은 간단하게 위와 같이 정리가 가능합니다. 위와 같은 상황에서 문자열보다 더 깊게 파고들어 단일문자로 들어가게 될 경우,언리얼 엔진..

언리얼 C++ - 간단한 언리얼 오브젝트 클래스 생성

언리얼 에디터에서 가장 기본적인 클래스인 Object로부터 상속받은 클래스 MyObject를 하나 만들어 보았습니다.코드의 구성은 언리얼 엔진에서 자동적으로 수행해주므로 우리는 필요한 기능을 추가하기만 하면 됩니다. 구성 부분을 설명하자면 다음과 같습니다. -기본적인 언리얼 오브젝트 클래스의 구성(1) 헤더언리얼 오브젝트가 생성되기 위해 기본적으로 가지는 헤더를 일컫습니다. (2) 클래스명.generated.h 헤더언리얼 오브젝트 클래스가 존재하기 위해 반드시 필요한 헤더로 헤더 파일의 순서 상 제일 아래에 위치해야 합니다.UHT(Unreal Header Tool)에 의해 이 파일 안의 소스코드가 자동으로 생성됩니다.개발자는 단순히 지정된 매크로만 입력해주면 되고, 이 파일의 안에는 접근하지 않아도 됩니..

언리얼 C++에 대해 배워보자! - 언리얼 오브젝트

저번 포스트에서는 언리얼은 성능과 안정성이라는 두 마리 토끼를 모두 잡기 위해언리얼 엔진만의 독특한 구조를 지니고 있다고 말씀드렸습니다. 그리고 그 독특한 구조는 언리얼 오브젝트로 설명할 수 있습니다. 1) 언리얼 오브젝트란?언리얼 오브젝트는 언리얼 엔진이 설계한 새로운 시스템의 단위 오브젝트를 말합니다.특징은 다음과 같습니다.기존 C++ 오브젝트에 모던 객체 지향 설계를 위한 다양한 기능의 추가일반적인 C++ 오브젝트와 언리얼 오브젝트의 두 객체를 모두 사용가능일반 C++ 오브젝트와 구분하고자 독특한 접두사를 사용특이한 접두사의 사용은 언리얼 엔진을 다루면서 매우 많이 볼 수 있는데, 예시를 들자면 다음과 같습니다. 일반적인 C++ 오브젝트는 F를, 언리얼 오브젝트는 U를 사용하고그 외에도 템플릿에는 ..

언리얼 C++에 대해 배워보자! - 들어가기에 앞서

객체지향 언어는 프로그램을 다수의 객체로 만들고, 이 객체들이 서로 상호작용하도록 하는 언어입니다.그리고 이 방식은 현대에서 컴퓨터와 관련된 여러가지 분야에서 사용되고 있습니다. 그리고 우리가 익히 아는 게임 엔진들 역시 객체지향 언어를 기본으로 하여 작동합니다.예컨대, Unity Engine은 C#을 기본 베이스로 하고 Unreal Engine은 C++을 기본 베이스로 합니다. 위의 게임 엔진말고도 Godot Engine은 C#과 C++을 양쪽 다 지원하고 Renpy는 파이썬을 기본으로 합니다.그런데 보다보면 뭔가 이상함을 느끼게 됩니다. 각 게임 엔진 별로 왜 서로 다른 언어를 사용할까요?그 이유는 객체 지향 언어 안에서도 서로 구분이 이뤄지기 때문입니다. 1) 객체 지향 언어의 비교- Native ..

언리얼 로그 메세지의 한글이 깨지는 현상과 해결책 / 부작용

언리얼 엔진을 사용해 빌드의 결과를 확인하려 로그를 열어보면 한글이 깨지는 현상을 볼 수 있습니다. 이 오류를 해결하는 방법은 생각보다 간단합니다. 윈도우 검색 탭에서 '국가 또는 지역변경'을 검색하시고,  위의 관련 설정 중 '기본 언어 설정'으로 들어가 주세요. 그 후에,  유니코드를 지원하지 않는 프로그램용 언어의 시스템 로캘 변경을 클릭하시고,  Beta: 세계 언어 지원을 위해 Unicode UTF-8 사용을 체크해주시면 됩니다. 체크 후, 재부팅을 하시면 언리얼의 로그가 정상적으로 출력되는 것을 확인하실 수 있습니다. 그러나, 저 위의 방법을 저는 추천드리지 않습니다. 저 설정을 적용하고 나면,언리얼과 관련 없는 프로젝트에 적어놓은 주석들이나 설치한 프로그램의 한글이 깨지는 현상을 확인하실 수..