언리얼 93

[언리얼 C++] 환경설정 파일

환경설정 파일은 프로젝트 로드시 초기화시킬 프로퍼티에 대한 값을 설정하는데 사용될 수 있습니다. 환경설정은 섹션별로 배치된 키-값 짝으로 이루어집니다. 주어진 키에 하나 이상의 값이 할당될 수 있습니다. 엔진 환경설정 파일은 오브젝트와 변수 기본값에 사용됩니다. 사용자 입력 환경설정 파일은 키 바인딩에 사용됩니다. 기본적으로 프로젝트 마법사를 통해 빈 프로젝트를 생성하면 DefaultEngine.ini, DefaultGame.ini 파일이 생성됩니다. 템플릿으로 새로 시작하는 프로젝트의 경우도 필요에 따라 DefaultEditor.ini, DefaultInput.ini 환경설정 파일이 생성될 수 있습니다. SaveConfig() 함수는 Config 클래스 지정자가 붙은 클래스에서 호출할 수 있습니다. 그..

[언리얼 C++] 명령줄 인수

명령줄 인수란, 실행파일로의 바로가기나 명령줄을 통해 실행파일을 실행시킬때 전달할 수 있는 키워드 문자열을 말합니다. 개발자나 사용자의 입맛에 맞게끔 엔진이 실행되는 방식을 맞추고자 할때 쓰입니다. 게임 대신 에디터를 실행시키는 것과 같은 단순한 것에서부터 게임을 특정 맵에서 지정된 해상도와 프레임으로 돌리면서 각 프레임을 개별 이미지 파일로 덤핑하는 것처럼 복잡한 것에까지 이릅니다. 1. 모드 인수 설명 -game 언쿠킹 컨텐츠를 사용하여 게임을 실행합니다. -server 언쿠킹 컨텐츠를 사용하여 게임을 서버로 실행합니다. 언쿠킹 컨텐츠를 사용하여 메인 에디터 실행파일을 게임으로 또는 서버로 강제 실행시키는데 사용되는 인수입니다. 이 명령어들은 대소문자를 구분하지 않습니다. UE4Editor.exe -..

[언리얼 C++] 게임 모드

언리얼 엔진 4에는 플레이중인 게임의 정보를 처리하는 게임 모드 클래스가 존재합니다. 큰 제약이 없는 게임일지라도 토대가 되는 규칙들이 있으며, 이러한 규칙들이 게임 모드를 이룹니다. 가장 기본적인 수준에서 이러한 규칙에 포함되는 것은 아래와 같습니다. 존재하는 플레이어와 옵저버의 수, 허용된 플레이어와 최대 옵저버 수 플레이어가 게임에 들어오는 방식, 스폰 위치 선택 규칙과 기타 스폰/리스폰 동작 포함 가능 게임 일시정지 가능 여부, 게임 일시정지 처리 방식 레벨간의 전환, 게임의 시네마틱 모드 시작 여부 포함 1. 게임 모드 플레이하는데 필요한 플레이어 수, 그 플레이어가 게임에 참가하는 방식 등의 기본적인 요소들은 여러 유형의 게임에 공통이지만, 어떤 게임을 개발하는지에 따라 무한대의 규칙 변종이 ..

[언리얼 C++] 게임 스테이트

게임 스테이트는 클라이언트가 게임의 상태를 모니터링할 수 있도록 해줍니다. 개념적으로 게임 스테이트는 접속된 모든 클라이언트가 알아야 하는 정보, 플레이어 개개인이 아닌 게임 모드에 관련된 정보를 관리해야 합니다. 그래서 접속된 플레이어 목록, 게임의 점수, 오픈 월드 게임에서 완료한 미션 등과 같은 게임 전반적인 프로퍼티 기록을 유지할 수 있습니다. 게임 스테이트는 게임에서 특정 플레이어가 팀 점수를 몇 점이나 올렸는지와 같은 개별 플레이어 단위의 기록을 유지하기에 좋은 곳은 아닙니다. 그런 부분은 플레이어 스테이트에서 보다 깔끔하게 처리할 수 있기 때문입니다. 일반적으로 게임 스테이트는 게임플레이 도중 변하면서 모두에게 관련이 있고 보일 수 있는 프로퍼티 기록을 유지해야 합니다. 게임 모드는 서버에만..

[언리얼 C++] 컨텐츠 애셋 유형 - 메시

메시에는 두 종류가 있습니다. 바로 스켈레탈 메시와 스태틱 메시입니다. 스켈레탈 메시는 애니메이션을 적용하여 메시를 변형시킬 수 있도록 설계된 계층형 본 스켈레톤에 묶인 메시입니다. 스태틱 메시는 비디오 메모리에 캐시되고 그래픽 카드에서 렌더링할 수 있는 폴리곤 세트로 구성되는 지오메트리 조각입니다. 1. 스켈레탈 메시 스켈레탈 메시는 두 부분으로 이루어져 있습니다. 스켈레탈 메시의 표면을 구성하는 폴리곤 세트와 폴리곤의 버텍스 애니메이션에 사용할 수 있는 계층형 상호 연결 본 세트입니다. 언리얼 엔진 4에서 스켈레탈 메시의 주 용도는 캐릭터나 기타 애니메이트 오브젝트를 나타내는데 쓰입니다. 3D 모델, 리깅, 애니메이션은 외부 모델링/애니메이션 어플리케이션으로 만든 다음 언리얼 에디터의 컨텐츠 브라우저..

[언리얼 C++] 온라인 서브시스템 Steam

온라인 서브시스템 Steam API를 통해 언리얼 엔진 4 애플리케이션을 Valve의 Steam 플랫폼에 출시하는 것이 가능합니다. Steam 모듈의 주 목적은 Steam 사용자들에게 매치메이킹이나 리더보드같은 피처 세트가 포함된 애플리케이션을 쉽게 배포할 수 있도록 하기 위함입니다. 추가적으로 Steam 모듈은 온라인 서브시스템으로 노출된 인터페이스를 다수 구현하여 Steamworks Software Development Kit(SDK)에 제공된 것을 대부분 지원합니다. 사용가능한 Steam 인터페이스는 아래와 같습니다. 매치메이킹 리더보드 업적 음성 유저 클라우드 공유 클라우드 외부 UI 위의 지원되는 인터페이스를 사용하여 애플리케이션에 피처 세트를 포함시킬 수 있습니다. 1. Steamworks 다..

[언리얼 C++] 게임플레이 프레임워크

게임플레이 프레임워크는 게임의 틀을 이루는 게임 규칙, 플레이어 입력과 컨트롤, 카메라, 유저 인터페이스 등의 코어 시스템입니다. 1. 기본 프레임워크 요소 다양한 게임 프레임워크 요소들이 서로 조합되어 게임을 이루게 됩니다. 게임을 이루는 기본 프레임워크 요소들은 다음과 같습니다. Game Mode Pawn Controller Camera User Interface 이제 위의 기본 프레임워크 요소들에 대해 간단히 설명하도록 하겠습니다. 게임 프레임워크의 바탕은 Game Mode입니다. Game Mode에서는 게임의 규칙을 설정하며, 플레이어의 스폰이나 게임 UI의 노출 처리를 할 수 있습니다. 플레이어 셋업이 이루어지는 곳은 Player Controller로, 이것이 Pawn을 빙의합니다. Pawn은 ..

[언리얼 C++] 게임 저장하기

1. SaveGame 오브젝트 생성 SaveGame 클래스는 Kismet/GameplayStatics.h에서 선언된 저장 및 로드 함수에 대한 대상으로 사용할 수 있는 오브젝트를 구성합니다. C++ 클래스 마법사를 사용하여 SaveGame을 기반으로 새로운 클래스를 생성할 수 있습니다. 클래스를 생성한 후, UPROPERTY(VisibleAnywhere, Category = Basic) FString PlayerName; SaveGame 오브젝트에 대한 헤더 파일에서 저장하고자 하는 변수를 선언하면 됩니다. UCLASS() class [PROJECTNAME]_API UMySaveGame : public USaveGame { GENERATED_BODY() public: UPROPERTY(VisibleAny..

[언리얼 C++] 온라인 서브시스템 데이터 타입

이 글에서는 온라인 서브시스템 전반에 걸쳐 사용되는 다양한 데이터 구조체에 대해 알아보도록 하겠습니다. 1. IOnlinePlatformData IOnlinePlatformData는 인터페이스 클래스로, 그 안에 들어있는 데이터를 고려하지 않고 데이터를 전달할 수 있도록 해줍니다. 사람이 읽을 수 있는 버전의 데이터는 ToString() 함수를 통해 얻을 수 있으며, 그 이외에는 플랫폼 코드만 데이터에 직접 연산해야 할 것입니다. 다양한 구조체의 플랫폼 전용 표현을 종종 볼 수 있는데, 게임에서의 처리는 필요하지만 디테일을 노출시킬 필요는 없는 것을 말합니다. 이를 통해 게임이 데이터를 보유하다가 세부적인 이해 없이도 다른 플랫폼에 리플리케이트할 수 있습니다. IOnlinePlatformData의 파생 ..

[언리얼 C++] Session 인터페이스(온라인 서브시스템)

매치메이킹은 플레이어와 세션을 매치해 주는 프로세스를 말합니다. 세션은 기본적으로 서버에서 실행중인 게임의 인스턴스를 말하는 것으로, 여기에는 일정한 프로퍼티를 통해 공개적으로 홍보해서 게임을 플레이하고자 하는 플레이어가 검색하여 참가할 수 있도록 하는 공개 세션과 초대를 받았거나 그 존재를 알고있는 플레이어만 참가할 수 있는 개인 세션이 있습니다. 현재 플레이중인 모든 게임이 나열된 온라인 게임 로비를 그려봅시다. 목록의 각 게임은 세션, 또는 개별 온라인 매치입니다. 플레이어는 검색이나 기타 수단을 통해 세션을 알게 되고, 그 세션에 참가하여 매치를 플레이합니다. 세션의 기본적인 life cycle은 다음과 같습니다. 원하는 세팅으로 새로운 세션을 생성합니다. 플레이어의 매치 참가 요청을 기다립니다...