전체 글

성장 과정 일기, 누군가에게 정보를 제공하기 위해서가 아닌 스스로 배운 내용을 정리하기 위해 작성하는 블로그 입니다. 잘못된 정보가 있으면 댓글로 적어주세요.
언리얼 게임 프레임워크기본적으로 게임을 만들기 위해서는 시스템이 어떻게 구성 되어있는지 알 필요가 있다.언리얼에서는 게임을 만들때 공통적으로 사용되는 시스템을 정리해서 하나의 프레임 워크로 제작해놓았다.이렇게 만들어진 프레임워크를 가져다가 세공하는 형식으로 게임을 제작한다.월드월드는 게임 컨텐츠를 담기 위해 제공되는 가상의 공간을 의미한다.특별한 오브젝트인데, 시간, 트랜스폼, 틱등 예약된 컴포넌트에 다양한 서비스를 제공한다.월드 세팀 이라는 환경설정을 통해 컨텐츠 제작을 할 수 있다. 월드 내부에서의 서비스르 바탕으로 동작하는 오브젝트들을 액터 라고 부른다.GameMode게임 규칙을 지정하고 게임을 판정하는 최고 관리자 액터이다. 무형으로 존재한다.언리얼 엔진에서는 하나의 게임에는 반드시 하나의 게임 ..
직렬화직렬화는 오브젝트나 연결된 오브젝트의 묶음을 바이트 스트림으로 변경화는 과정으로 말한다.게임 서버에서 패킷을 만들어 낼 때 사용해봤다. 복잡한 데이터를 일렬로 세워서 사용하기 편하게 만드는 것이라고 생각하면 된다.직렬화를 역으로 하는 것을 역직렬화, Deserialization이라고 한다.Object → Byte Stream = 직렬화 (Serialization)Byte Stream → Object = 역직렬화 (Deserialization)직렬화의 장점프로그램의 상태를 저장하고 복원이 가능하다 (게임 Save)객체 정보를 클립보드에 복사해서 다른 프로그램으로 전송가능네트워크를 통해 프로그램의 상태를 복원할 수 있음 (멀티 게임)압축과 암호화를 통해서 데이터를 안전하게 보관이 가능하다더보기직렬화 구..
언리얼 구조체언리얼 오브젝트는 UCLASS 매크로를 통해 리플렉션을 보장 받았는데, 구조체 라고 못 받을리 없다.구조체는 UStrurct를 이용해 관련 프로퍼티를 체계화 및 조작할 수 있다.공식 문서에 적혀져 있는 그대로 가져와 보자.USTRUCT(BlueprintType)// 블루 프린트와 호환되는 데이터 성격을 띄게 된다.struct FMyStruct{ GENERATED_BODY()//우리가 흔히 아는 Generate_Body => 리플렉션을 통해서 활용할 수 있도록 뼈대를 제공. //~ 다음 멤버 변수는 블루프린트 그래프를 통해 액세스할 수 있습니다. // 테스트 변수에 대한 툴팁입니다.//리플렉션을 활용해서 조회하거나, 블루프린트에서 동작하게 끔 볼 수 있음. UPROPERT..
C++ STL과 UTL(언리얼 컨테이너 라이브러리)의 차이점기본적으로 C++의 STL을 게임에 적용해 사용하기에는 그렇게 좋지 않은 성능을 낼 수 있다. 따라서 언리얼 엔진 자체적으로 개발한 컨테이너 라이브러리에 대해 알아보자.둘의 차이점은 다음과 같다.C++ STLUTL범용적으로 설계되어 있다. 따라서 게임 오브젝트와의 연동이 안될 수도 있다.언리언 엔진에 특화되어 있다.표준이기 때문에 호환성이 높다.언리얼 오브젝트 구조를 안정적으로 지원한다.많은 기능이 엮여 있어서 컴파일 시간이 오래걸린다.가볍고 게임 제작에 최적화가 되어있다.우리는 게임을 개발하면서 많은 자료구조를 사용할테지만 그 중 대부분이TArry, TSet, TMap을 사용할 것이다. TArray는 오브젝트를 순서대로 담아 효율적으로 관리하는..
언리얼 C++ 인터페이스인터페이스란객체가 반드시 구현해야할 행동을 지정하는데 활용하는 타입을 의미한다. 다형성의 구현과 의존성이 분리된 설계에 매우 유용하게 활용된다.언리얼에서는 월드에 배치되는 모든 오브젝트중 안 움직이는 오브젝트를 포함 할 때 액터라는 클래스를 상속받는다.만약 움직이는 오브젝트라면 Pawn을 상속받게 되는데 이때, Pawn은 반드시 움직임을 구현해야하기 때문에 움직임 관련 인터페이스를 상속받게 해 반드시 구현하게 제작해야한다.이전 코드에서 작성한 것을 수정해서 교직원이 추가되었는데 교직원을 제외한 나머지는 반드시 구현해야하는 기능을 가지고 있다고 해보자.언리얼 C++ 인터페이스 특징언리얼에서 인터페이스를 생성하면 2개의 클래스가 한 파일에 생성된다. U로 시작하는 타입 클래스 (타입을..
언리얼 리플렉션 시스템다른 말로는 언리얼 프로퍼티 시스템이라고도 한다. Reflection 시스템은 프로그램을 실행하면서 자기 상태를 바라보는 것 이라고 할 수 있는데 이 기능 자체가 언리얼의 근간을 이룬다.코드가 돌아가면서 뭔가 문제고~~ 이런거를 파악하는 것을 리플렉션이라고 하는 것이다.C++에서는 이런 기능이 없고 언리얼에서 자체적으로 구성 한 것이다. 그렇다면 리플렉션은 어떻게 보장받을 수 있을까???언리얼에서는 리플렉션을 하고자 하는 유형 또는 프로퍼티에 특정 매크로를 설정해 Unreal Header Tool에 의해서 프로젝트를 컴파일 할 때 해당 정보를 수집하게 된다.#include "FileName.generated.h" // 이게 바로 리플렉션을 보장하는 시스템이구나.UENUM(), UCL..
언리얼 엔진의 코딩 표준코딩 표준은 프로그래밍을 작성해야하는데 지켜야하는 프로그래밍 이름 규칙이나 작성 방법들을 지정한 가이드라인이다. 코딩 스타일이나 코딩 컨벤션이라고도 한다. 그렇다면 좋은 코딩 스타일은 무엇일가??절대적으로 좋은 것은 없다.중요한 것은 코딩 스타일을 정하고 잘 따르는 것에 있다.이미 프로젝트에 적용된 코딩 스타일을 잘 숙지하고 따라야한다.그렇다면 이제부터 우리만의 코딩 스타일을 정해서 작성하면 될까? 또는 이미 C++의 코딩 스타일을 유지하면 될까?아니다. 언리엘 엔진 자체에서 코딩 표준을 정해서 문서화 해놓았다.이는 권고따위가 아니라 반드시 지켜야하는 수준이다. 언리얼 공식 사이트에 따르면 코딩 스타일을 따르는 이유는 다음과 같다고 한다.소프트웨어의 총 수명 비용 중 80%는 유지..
유니티 프로젝트에 이어서 처음으로 언리얼을 공부를 시작했다.본 내용은 인프런의 이득우의 언리얼 엔진 강의를 참고했으며 내용을 포함하고 있다.프로젝트 세팅강의에서는 5.1.1 버전을 사용했지만 필자는 5.4버전으로 할 예정이다. 그 이유는 .Net 6.0.0 버전이 언리얼 5.1.1에는 필요한 것 같은데 5.4 버전은 .Net 8.0이 필요하다. 이는 이미 설치가 되어있기에 5.4 버전으로 진행한다. 언리얼 엔진을 사용할 때 코드 편집기는 VS만 꼭 사용해야하는 건 아니다. Rider 와 같은 다른 툴을 사용해도 무방하다. 다문 디버그 최적화 같은 경우 VS가 잘 되어있으니(VS Assist도 있고) VS 2022 버전으로 진행한다. 언리얼은 에픽게임즈를 통해 설치할 수 있다. 설치를 한 후 빈 프로젝트를..
면접에 나올 수 있는 주요 내용을 한번 테마별로 정리해보겠다. 벡터와 행렬과 같은 내용은 중요는 하지만 면접에 나올만 내용은 아니다. 이를 모르면 렌더링이라는 것에대해 설명할 수 없기 때문에 아예 기초 수준으로 깔고 가기 때문이다.더보기ne*** 에서는 행렬의 교환 법칙과 결합 법칙을 물어본 적이 있다고 한다. 1. SwapChain을 사용하는 이유? 더블 버퍼링이란? 후면 버퍼와 정면 버퍼의 역할?더보기SwapChain은 전면 버퍼와 후면 버퍼 간의 교체를 관리하기 위해 사용합니다. 이를 활용해 더블 버퍼링은 하나의 버퍼만 사용했을 때, 렌더링 중 화면 깜빡임이 발생하는 것을 방지하고 성능을 향상시키기 위해 두 개의 버퍼를 사용하는 것을 의미합니다. 여기서 후면 버퍼는 현재 GPU가 그리고 있는 버퍼이..
Terrain물방울 책에 있는 Terrain 예제는 엄청난 기술들의 집합이다.이렇게 큰 terrain을 관리할 때, 여기에 사용된 주된 기술은 다음과 같다.지형의 높이를 관리하기 위해 Height map 이라는 텍스처를 이용한다. 이때 이 텍스처는 일정 텀마다의 높이를 저장하고 있다. (HeightMap을 통한 지형 높이 지정)Smooth하게 높이를 만들기 위해 쉐이더에서 위치를 Height map을 이용해 지정하기 직전 주변 픽셀 8개를 분석해 평균 값으로 높이를 지정한다.(주변 높이와 평균 값을 맞춰 Smooth)두번째 사진과 같이 Tessellation을 이용해 LOD를 적용했다. 이때 사용된 것은 Terrain이 워낙 넓기 때문에 이를 몇개의 그리드로 잘라서 해당 그리드가 카메라와 멀어지면 삼각형..
Mintriever
어제보다 성장한 나