아직도 유니티만? - 2016 언리얼 서밋 발표 자료

79
UNREAL SUMMIT 2016

Transcript of 아직도 유니티만? - 2016 언리얼 서밋 발표 자료

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

핵심 개념1언리얼오브젝트

개념2게임플레이프레임웍

개념3언리얼

빌드시스템

개념4언리얼

모듈시스템

개념5언리얼

패키징시스템

개념6언리얼

네트웍시스템

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

언리얼 오브젝트( U로 시작~ )

일반 C++ 오브젝트( F로 시작~ )

UNREAL SUMMIT 2016

언리얼 헤더 툴(UHT)

언리얼 오브젝트 선언

메타 정보(Intermediate폴더)

원본 소스(Source폴더)

UNREAL SUMMIT 2016

1. 언리얼오브젝트이름.generated.h 파일이 보이지 않더라도 일단 include 시켜주자. 나중에 생성된다.

2. UCLASS 매크로를 사용해 헤더툴에게 이 클래스가 언리얼 오브젝트임을 알려주자.

3. 언리얼 오브젝트는 클래스 이름에 고유한 접두사(Prefix)를 가져야 하는데, U와 A가 있다. 액터 기반이 아니면 모두 U를 써주면 된다.

4. UObject는 언리얼 오브젝트 가계도의 최상단에 위치한기본 클래스.

5. GENERATED_BODY() 매크로도 마찬가지로 그냥 써주자. 최소한의 규칙이다.

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

빌드 명령시작~

소스코드 파싱 후메타 데이터 생성

~generated.h/cpp

이제부터진짜 컴파일

하나의 언리얼오브젝트마다

UClass 객체가생성됨

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

CDO

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

게임브리오 언리얼 3 유니티 언리얼 4

UNREAL SUMMIT 2016

Player0

Player1

Actor

NPC

프로젝트

월드

레벨 게임모드

Join

Join

UNREAL SUMMIT 2016

ue4application.exe

UGameInstance

월드 1 월드 2 월드 3

UNREAL SUMMIT 2016

Actor

NPC

월드 1

퍼시스턴트 레벨

Join

Join

Player0

Player1

게임모드

스트리밍 레벨

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

Trigger / Block / Trace 를 사용해 충돌 감지유니티의 Trigger / Collision / Raytrace와 동일

Static Mesh / Skeletal Mesh 컴포넌트를 사용Skeletal Mesh는 유니티의 메카님에 해당하는,AnimBlueprint를 사용해 애니메이션을 제어할 수 있다.

언리얼 엔진은 다양한 Movement 컴포넌트를 제공한다.Movement 컴포넌트는 AddMovementInput로 입력을 받아최상위 컴포넌트를 이동시키도록 구성되어 있다.이동에 대한 결과는 폰의 Velocity로 확인할 수 있다.

폰 구성에 필요한기본 3요소

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

NPC의 제어

정찰 중 플레이어 혹은 다른 폰을 감지하기 위해 제공사운드까지 감지 가능하다.

캐릭터 인공지능 로직을 설계하는 UI를 제공한다.블랙보드를 사용해 데이터를 관리하고, 현재 상황에서수행할 태스크를 제작해 활용할 수 있다.

무브먼트 컴포넌트에서 캐릭터 회피 시스템을 제공한다.심플하지만 네비 영역에서 빠질 수 있는 RVO와 복잡하지만네비 영역 내 움직임을 보장하는 Detour Crowd 방식이 있다.

NPC에게 네브메시를 사용해 특정 액터를 따라가거나특정 지점으로 이동시키게 명령을 내릴 수 있다.

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

서버와 클라이언트 코드가 공존하는 게임 프로그램 제작

클라이언트 코드만 들어있는 게임 프로그램 제작

서버 코드만 들어있는 게임 프로그램 제작

에디터용 모듈(dll) 제작

엔진에서 연동해서 쓰는 콘솔 응용 프로그램의 제작

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

언리얼 엔진 전체 모듈 ( C++ )

UNREAL SUMMIT 2016

• Developer : 에디터와 프로그램에 사용하는 공용 모듈의 모음. 게임에는 사용되지 않음.

• Editor : 에디터 UI를 구성하는 모듈의 모음.게임에는 사용되지 않음.

• Runtime : 게임에 사용하는 모듈의 모음.모든 곳에서 사용 가능

• ThirdParty : 빌드 시 외부 라이브러리 참조를 위한 모듈의 모음

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

1. 플러그인 폴더 : 플러그인을 관리하는 최상위 폴더. 2. 플러그인 명세서 : 플러그인에 대한 각종 명세.3. 리소스 폴더 : 에디터에서 사용할 플러그인 리소스.4. 소스 폴더 : 플러그인에서 사용하는 모듈들의 집합.

UNREAL SUMMIT 2016

외부 모듈에서 언리얼 오브젝트 사용멤버 함수 접근 가능

외부 모듈에서 언리얼 오브젝트 사용 불가

외부에서 언리얼 오브젝트 형만 사용 가능멤버 함수 접근 불가능.

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

텍스쳐 애셋

RGB24 데이터

텍스쳐 애셋

ETC1 데이터

플랫폼용 애셋원본 애셋

원본 파일

쿠킹(Cooking)

임포트(Import)

UNREAL SUMMIT 2016

RGB24데이터

ETC1 데이터

RGB 데이터

파생 데이터 캐시 저장소

ETC1 데이터

RGB24 데이터

UNREAL SUMMIT 2016

[InstalledDerivedDataBackendGraph]Boot=(Type=Boot, Filename="D:/DerivedDataCache/DarkWarrior/Boot.ddc", MaxCacheSize=512)Local=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, DeleteUnused=true, UnusedFileAge=34, FoldersToClean=-1, Path="D:/DerivedDataCache/DarkWarrior")Pak=(Type=ReadPak, Filename="%GAMEDIR%DerivedDataCache/DDC.ddp")CompressedPak=(Type=ReadPak, Filename="%GAMEDIR%DerivedDataCache/Compressed.ddp", Compressed=true)

설정 예시

UNREAL SUMMIT 2016

텍스쳐 애셋

원본 데이터

텍스쳐 애셋

ETC1 데이터

파생데이터캐시 저장소

데이터 파생 캐시 서버

ETC1 데이터

작업자1

첫 쿠킹시변환된 데이터를중앙 서버에 저장

중앙 서버에서 다른작업자가 만든

파생 캐시 데이터를가져와 쿠킹을 처리

작업자2

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

서버만소유하는

오브젝트 그룹

서버와모든 클라가공유하는

오브젝트 그룹

서버와소유 클라만소유하는

오브젝트 그룹

서버에는 없이소유 클라에만사용하는

오브젝트 그룹

UNREAL SUMMIT 2016

GameMode

GameState

PlayerState

Pawn

PlayerController

UMG

HUD

UNREAL SUMMIT 2016

Player 1 UMG

Player 1 HUD

Player 1 PlayerController

Player 1 PlayerState

Player 1 Pawn

GameState

Player 2 PlayerState

Player 2 Pawn

Player 2 UMG

Player 2 HUD

Player 2 PlayerController

Player 1 PlayerState

Player 1 Pawn

GameState

Player 2 PlayerState

Player 2 Pawn

Player 1 PlayerController

Player 2 PlayerController

GameMode GameState

Player 1 PlayerState

Player 1 Pawn

Player 2 PlayerState

Player 2 Pawn

UNREAL SUMMIT 2016

원본 Actor

복제된Actor

복제된Actor

UNREAL SUMMIT 2016

원본 Actor

복제된Actor

복제된Actor

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016

UFUNCTION(Server, Reliable, WithValidation)

void AddMoney(int32 money);

virtual void AddMoney_Implementation(int32 money);

virtual bool AddMoney_Validate(int32 money);

void 클래스::AddMoney_Implementation(int32 money){

CurrentMoney += money;}

bool AddMoney_Validate(int32 money){

if(money > 10000){

}return true;

}

UNREAL SUMMIT 2016

UNREAL SUMMIT 2016