플레이어 입력(PlayerInput) 오브젝트는 플레이어의 입력을 플레이어 컨트롤러 또는 폰과 같은 액터가 이해하고 사용할 수 있는 데이터로 변환하는 기능을 한다. 이는 플레이어의 하드웨어 입력을 플레이어 입력 매핑 및 입력 컴포넌트를 통한 움직임과 게임 이벤트로 변환하는 입력 처리 흐름의 일부다. 하드웨어 입력 플레이어의 하드웨어 입력은 일반적으로 키 누름, 마우스 클릭 또는 마우스 움직임, 컨트롤러 버튼 누름 또는 조이스틱 움직임 등이 있다. 표준 축 또는 버튼 인덱스를 따르지 않거나 특이한 입력 범위를 갖는 특수 입력 디바이스는 RawInput 플러그인을 사용하여 수동으로 설정할 수 있다. 플레이어 입력 PlayerInput은 플레이어 입력을 관리하는 플레이어 컨트롤러 클래스 내의 UObject다...
언리언 엘진의 비헤이비어 트리 개념과 일반적인 비헤이비어 트리와의 차이점을 알아보자 언리얼 엔진 5(언리얼 엔진)에서 캐릭터에 사용할 인공 지능(AI)을 생성하는 방법은 다양하다. 블루프린트 비주얼 스크립팅(Blueprint Visual Scripting)을 사용하면 캐릭터가 애니메이션을 재생하거나, 특정 위치로 이동하거나, 충돌에 반응하는 등 '무언가를 하도록' 지시할 수 있다. AI 캐릭터가 스스로 생각하고 결정을 내리도록 하려면 비헤이비어 트리(Behavior Tree)를 사용해보자. 아래 비헤이비어 트리는 AI 캐릭터가 순찰과 플레이어 추격 사이에서 행동을 전환하는 예시다. 비헤이비어 트리 기본 비헤이비어 트리는 블루프린트와 유사한 시각적 방식으로 생성된다. 기능이 탑재된 다양한 노드를 추가하고 ..
공용 슬레이트 인수 다음은 공통 인수이다. IsEnabled - 상호작용(Interation) 가능한 위젯인지를 지정한다. 끄면 회식으로 비활성화 된다. ToolTip - 툴팁에 사용할 커스텀 SToolTip 위젯 종류를 지정한다. 지정되지 않으면 툴팁이 나타나지 않는다. ToolTipText - 간단한 툴팁으로 표시할 텍스트 유형을 지정한다. 지정되지 않거나, ToolTip 특성이 사용된 경우 나타나지 않는다. Cursor - 마우스를 올렸을 때 표시할 커서를 지정합니다. Visibility - 아래 Visibility 부분을 참고. Text - 텍스트가 적용 가능하다면 지정할 문구 Content - 콘텐츠가 적용 가능하다면 지정할 위젯 ReadOnly - True 면 이 위젯은 수정할 수 없다. St..
동기 위젯에서 UI를 만들 때 어려운 부분 UI 디자인과 반복 작업 데이터 흐름 제어 : 위젯과 내재된 데이터끼리 묶어주는것 UI 기술(description)을 위한 외국어 습득 IMGUI : Immediate Mode Graphics User Interface 장점 프로그래머는 UI 기술이 데이터에서 구하기 쉽다는 점에서 코드와 비슷하다는 점을 선호한다. 실효(Invalidation)은 문제가 되지 않고, 그냥 데이터를 직접 폴링(poll)한다. 인터페이스의 절차적 생성이 쉽다. 단점 애니메이션과 스타일링 추가가 어려움 UI기술이 명령형 코드라서, 데이터 주도형으로 만들기 어려움 목표 모델의 코드와 데이터에 쉽게 접근 UI 절차적 생성 지원 UI 설명이 꼬이지 않도록 애니메이션과 스타일을 반드시 지원 ..
Slate는 Unreal Editor 또는 게임내 사용자 인터페이스와 같은 도구 및 응용 프로그램용 사용자 인터페이스를 효율적으로 구축하도록 설계된 플랫폼에 구애받지 않는 맞춤형 사용자 인터페이스 프레임워크이다. 서술형(declarative) 문법에 쉬운 디자인, 레이아웃, 스타일 요소가 결합된 Slate를 통해 쉬운 UI제작 및 반복 작업이 가능할 것이다. Slate UI 솔루션으로 툴과 어플리케이션에 사용할 GUI를 매우 쉽게 조합시킬수 있으며, 반복처리도 빠르게 가능하다. 서술형 문법 Slate의 서술형 문법(Declarative syntax)은 프로그래머가 인디렉션(indirection) 레이어를 추가하지 않고도 UI제작을 가능하게 해준다. SLATE_BEGIN_ARGS( SSubMenuButto..
언리얼 엔진에서 Volume(볼륨) 이란 레벨의 일정 영역에 대한 작동방식을 변경하는 데 사용되는 3차원 액터이다. 볼륨 내 플레이어 또는 다른 액터에 대미지를 유발 특정 액터의 볼륨 진입금지, 즉 충돌 표면 역할 액터가 볼륨에 들어서면 이벤트를 발생 레벨의 라이팅 또는 가시성 계산 방식을 변경 볼륨 배치와 생성 액터 배치 창에서 볼륨 탭을 선택한다음 레벨 뷰포트에 끌어다 놓으면 된다. 볼륨을 레벨에 배치후 원하는 대로 크기와 위치를 조정하면 된다. 브러시 모든 볼륨 액터들은 AVolume을 상속 받고, AVolume은 ABrush를 상속 받고 있다. 그리고 ABrush에는 Brush라는 UModel 변수를 통해 폴리곤 정보 (외형정보)를 가지고 있다. 브러시 빌더 브러시의 폴리곤 정보를 가공(빌드)하기..
언리얼의 코딩 표준 및 규칙을 정리해보자 코딩 규칙이 중요한 이유 소프트웨어의 총 수명 비용 중 80%는 유지보수에 소모된다. 최초 작성자가 그 소프트웨어의 수명이 다할 때까지 유지보수하는 경우는 거의 없다. 코딩 규칙을 사용하면 소프트웨어의 가독성을 향상하여 엔지니어가 새로운 코드를 더 빠르고 완벽히 이해할 수 있다. 에픽에서 소스 코드를 모드 개발자 커뮤니티에 공개할 경우 코딩 규칙을 알고 있으면 이해하기 더 쉽다. 대다수의 코딩 규칙이 크로스 컴파일러 호환성에 필요하다. 클래스 채계 public을 먼저 선언하고 그 후 private 구현이 뒤따르도록 한다 저작권 공지 에픽이 배포용으로 제공한 소스 파일은 반드시 파일의 첫줄에 저작권 공지를 포함시켜야 한다. // Copyright Epic Games..
언리얼의 데이터를 json 파일로 추출하는 방법에 대해 알아보자 예제 파일 이전 로드 예제에서 사용했던 예제파일과 동일하게 출력되도록 할 예정이다. { "name" : "Kim" "level" : 20, "items" : [ { "itemid" : 100, "count" : 3, } { "itemid" : 200, "count" : 1, } ] "skills" : [ "fireball", "icebolt", ] } 파일 내용 작성 JsonWriter에 직접 Key Value를 입력하는 방법과 데이터를 가공한 JsonObject가 있다면 FJsonSerializer::Serialize 함수를 통해 자동 입력하는 방법이 있다. //Key Value 입력하는 방식 FString FileStr; FString ..
개요 언리얼 엔진에서 Json 포멧의 파일을 읽어들이는 방법을 알아보자 설정 [projectname].build.cs 프로젝트에서 Json 모듈을 추가하자 // Fill out your copyright notice in the Description page of Project Settings. using UnrealBuildTool; public class MyProject : ModuleRules { public MyProject(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core",..
데이터 레이어는 월드 파티션 내부의 시스템으로, 액터를 별도 레이어로 구성하는데 사용된다. 데이터 레이어에 액터 추가 데이터 레이어 컨텍스트 메뉴에서 새 데이터 레이어에 선택한 액터 추가 및 선택된 데이터 레이어에 선택된 액터 추가 항목을 선택 월드 아웃라이너에서 선택한 액터를 데이터 레이어 아웃라이너의 데이터 레이어에 드래그 액터의 디테일 패널에서 데이터 레이어 섹션을 사용 데이터 레이어 아웃라이너 창 -> 데이터 레이어 옵션을 선택하면 데이터 레이어 아웃라이너 창이 열린다. 데이터 레이어는 계층구조를 가진다. 데이터 레이어 단위로 액터를 보임/숨김 처리 할 수 있다. 데이터 레이어 단위로 런타임 로드 설정을 할 수 잇다. 데이터 레이어에 속한 액터 목록을 볼 수 있다. 액터의 디테일 패널 액터의 디테..
월드 파티션은 언리얼 엔진 5로 넘어오면서 대규모 월드를 관리하기 위해 언리얼 엔진 4에서 사용되었던 월드 컴포지션을 대체하는 시스템이다. 월드 컴포지션의 경우 레벨안에 서브레벨을 두어 관리하는 방식이였다면, 월드 파티션은 단일 퍼시스턴트 레벨에 월드를 저장하여 스트리밍 소스와 셀의 거리에 따라 로드, 언로드를 조절하는 시스템이다. 월드 파티션은 다음 4가지 큰 특징이 있다. 액터당 한개의 파일 (One File per Actor) 월드 파티션 - 데이터 레이어(Data Layers) 레벨 인스턴싱 (Level Instancing) 월드 파티션 - HLOD (Hierarchical Levels of Detail) 월드 파티션 활성화 월드 파티션을 활성화 하기 위해서는 3가지 방법이 있다. 게임 카테고리에..
월드 컴포지션 WorldComposition은 대규모 월드 관리를 위해 만들어진 툴이다. 퍼시스턴트 레벨을 이용하여 스트리밍 정보를 저장하지 않도록 하여 동시에 레벨 작업을 하고자 할 때 병목현상을 해결할 수 있다. 퍼시스턴트 레벨에는 스트리밍 정보를 폴더 검색을 통해 발견된 레벨을 스트리밍 레벨로 적용한다. 각 스트리밍 레벨에는 패키지 헤더 정보가 저장되어 있어, 월드 컴포지션은 레벨을 메모리에 로드하지 않고도 정보를 읽을 수 있다. 월드 컴포지션은 거리 기반 레벨 스트리밍에 사용되는 월드 원점 시프트 기능에 의존하는데 이를 통해서 거대한 월드를 만들 수 있다. 월드 컴포지션 활성화 월드 세팅에서 월드 컴포지션 활성화 옵션을 켜는것으로 활성화 시킬 수 있다. 레벨 계층구조 창 메뉴에서 레벨을 선택하면 ..