언리얼 엔진 4.6 릴리즈 노트

Windows
MacOS
Linux

언리얼 엔진 4.6 이 나왔습니다! 이번에는 다수의 라이팅 및 머티리얼 개선, 네트워크 데모 캡처 및 재생 지원, 루트 모션 블렌딩과 멀티 몽타주 지원을 비롯한 애니메이션 작업방식이 대거 업데이트되었습니다. 새로운 모바일 프리뷰 렌더링 모드에서는 모바일 디바이스에서 나타나는 그대로 씬을 확인하며 편집할 수 있습니다. 언리얼 모션 그래픽을 통한 UI 제작도 크게 향상되어, 상호작용형 UI 위젯을 3D 씬에 바로 넣을 수 있게 되었습니다. 여러가지 기능 및 버그 픽스를 포함해서 모바일과 콘솔 플랫폼에 대해서도 개발을 계속 해 오고 있습니다.

이번 릴리즈에는 언리얼 엔진의 우월한 개발자 커뮤니티에서 제출된 변경사항 88 개가 포함되어 있습니다. 기여해 주신 분들께 감사의 마음 전하고자 합니다:

Alex Silkin (alexSilkin), alwei, Allegorithmic, Artem V. Navrotskiy (bozaro), Cengiz Terzibas (yaakuro), Flenzine, Gigantoad, Rama (EverNewJoy), Joel Riendeau (joelriendeau), Jakub Stasiak (jstasiak), Joe Hegarty (JoeHegarty), Marat Radchenko (slonopotamus), Michael Kösel (TheCodez), Michelle12188, Marcin Polaczyk (mpolaczyk), MyDigitalLife, mordentral, KazumasaOhashi, leobenaducci, Lukasz (iniside), Nicholas Hughes (piinecone), Sebastian Köcke (byte3), Salamanderrake, Stephen Whittle (stephenwhittle), Tomas Jedlicka (jedlickat), Rick Yorgason (Skrapion), Kyle Rocha (kylawl)

주요 신기능

실험단계: 3D 언리얼 모션 그래픽 UI

이제 UI 위젯을 컴포넌트에 붙여 3D 씬에 표시되도록 할 수 있습니다!

3DumgUI01.png

  • 이 기능을 사용하려면, 액터에 새 "위젯 컴포넌트" 를 추가한 다음 거기에 위젯 애셋을 할당해 주면 됩니다. 이 기능은 아직 실험단계 기능으로 간주되고 있지만, 곧 여러가지 개선 작업 및 기능 추가가 있을 예정입니다.

  • UI 는 화면 밖 타깃에 렌더링한 다음, 액터에 붙은 3D 쿼드에 매핑됩니다. 입력도 지원되므로, 마우스 커서가 표시되는 게임의 경우 사용자는 버튼 클릭과 같은 동작이 가능할 것입니다.

  • 위젯 컴포넌트의 디테일 뷰에서 3D 위젯의 렌더링 세팅에 대한 환경설정이 가능합니다. UI 렌더링 대상이 되는 렌더 타깃 크기를 조절하는 "Draw Size" 설정도 잊지 마세요.

3DumgUI02.png

이미시브 머티리얼에서의 스태틱 라이팅

이미시브(발광) 머티리얼은 이제 주변 오브젝트를 바로 비출 수 있게 되었습니다!

StaticLightingfromEmissiveMaterials.png

  • 이 기능을 켜려면 모빌리티를 스태틱으로 설정하고 섀도 캐스팅 컴포넌트의 "Use Emissive For Static Lighting" (스태틱 라이팅에 이미시브 사용) 옵션을 사용하면 됩니다. 켜면, 라이트매스는 이미시브 텍스처 소스에서 구은 직사광을 생성합니다.

  • 주: 이 기능은 이미시브 라이팅을 제한시킨 빠른 버전입니다. 직사광만 계산되지만 빌드 시간에는 영향이 없습니다. 다른 광원이 있는 씬에서 사용하는 것이 좋습니다.

폴리지의 스태틱 라이팅

폴리지 오브젝트와 인스턴싱된 메시에 미리계산된 빛과 그림자가 지원됩니다! 스테이셔너리 / 스태틱 라이트가 있는 씬의 매우 효율적인 렌더링이 가능합니다.

StaticLightingonFoliage.png

스태틱 라이팅은 중간 크기 레벨에 적당하지만 빌드 시간이나 메모리 요구량 면에서 커다란 씬에는 적합하지 않습니다. 여러 번 인스턴싱되는 메시에는 라이트맵 해상도를 아주 작게 하도록 하세요.

데모 녹화 (네트워크 리플레이 캡처)

게임플레이 '즉석 리플레이'를 저장할 수 있습니다! 게임의 네트워크 스트림을 '데모' 파일에 저장하여 나중에 재생하거나 다른 사람과 공유할 수 있습니다. 타임 워프를 통해 게임을 늦추거나 빠르게 돌릴 수도 있습니다.

DemoRecording.png

데모 녹화 기능은 네트워킹이 켜진 언리얼 엔진 게임에서 자동으로 작동합니다.

  • 녹화를 시작하는 콘솔 명령은 "DemoRec <리플레이 이름>" 입니다.

  • 기존에 녹화된 게임을 재생하는 콘솔 명령은 "DemoPlay <리플레이 이름>" 입니다.

  • 슬로모션 및 빨리감기 기능을 사용해 보세요! 콘솔 명령은 "Demo.TimeDilation <배수>" 입니다. 예를 들어 절반 속도 재생은 "Demo.TimeDilation 0.5" 입니다.

  • ShooterGame 샘플에 새로운 "Demos" 게임내 메뉴를 사용하여 저장된 리플레이를 탐색하는 기능이 내장되었습니다. 확인해 보세요! (참고로 리플레이를 저장하려면 먼저 "DemoRec" 을 사용해야 합니다.)

실험단계 기능: 에디터에서 모바일 프리뷰

모바일 디바이스에서 씬이 어떻게 보일지 에디터 뷰포트에서 미리볼 수 있게 되었습니다! OpenGL ES2 의 모양과 느낌대로 셰이더 에뮬레이션을 자유자재로 매끄럽게 전환할 수 있습니다.

MobilePreviewInEditor.png

  • 에디터 개인설정의 실험단계 기능 세팅에서 Feature Level Preview (피처 레벨 프리뷰)를 켜야 합니다.

  • -메인 에디터 툴바에서 Settings (세팅) ->Feature Level Preview (피처 레벨 프리뷰) -> ES2 입니다.

실험단계 기능: 웹 브라우저 UI 위젯

새로운 웹 브라우저 UI 위젯을 사용하여 게임이나 에디터 툴 안에서 바로 웹 페이지를!

WebBrowserUIwidget.png

  • 새로운 슬레이트용 웹 브라우저 위젯(SWebBrowser)을 사용하면 웹 페이지를 대화식으로 쉽게 탐색하고 UI 의 일부분으로 표시할 수도 있습니다. 임베딩된 크롬(Chromium) 웹 프레임워크(CEF3) 덕입니다. 이 기능은 현재 실험단계 기능으로, Windows 플랫폼에서만 지원됩니다.

블루프린트에서 스팀 온라인 세션

이제 언리얼에 블루프린트 스크립팅을 통한 온라인 세션 호스팅, 발견, 참가가 지원됩니다!

SteamOnlineSessions.png

  • 스팀은 물론 LAN 환경도 포함해서, 온라인 세션에 대한 호스팅, 참가, 종료, 검색을 위한 블루프린트 노드를 새로 추가했습니다.

  • 새로운 노드는 이렇습니다:

    • Create Session: 네트워크에서 발견 가능한 세션을 호스팅합니다.

    • Find Sessions: 네트워크에서 참가할 수 있는 세션을 검색합니다.

    • Join Session: Find Sessions 에 검색된 세션에 참가합니다.

    • Destroy Session: 기존에 생성 또는 참가했던 세션을 종료합니다.

새로운 머티리얼 시스템 기능

복수 텍스처 머티리얼
  • 머티리얼은 새로운 '공유' 텍스처 샘플러를 사용하여 최대 128 개의 고유 텍스처를 사용 가능합니다. 이들은 SamplerSource 프로퍼티를 설정하는 것으로 TextureSample 노드에 설정됩니다. 기존에는 텍스처를 최대 13 개 까지만 사용할 수 있었습니다.

MaterialsWithManyTextures.png

  • 터레인, 하이 퀄리티 캐릭터 머티리얼, 고급 포워드 셰이딩 머티리얼과 같은 레이어 머티리얼의 품질 향상에 정말 중요한 부분입니다.

  • DirectX 11 및 콘솔은 한 번에 128 개의 텍스처를 지원하지만, (Windows나 Mac의) OpenGL 렌더링 패스는 머티리얼당 텍스처가 여전히 13 개 까지로 제한됩니다. 이 제한을 넘는 경우 셰이더가 GL 컴파일에 실패합니다.

스칼라 및 벡터 파라미터 기본값 실시간 미리보기
  • 이제 스칼라 또는 벡터 파라미터의 기본값을 변경하고 그 결과를 모든 3D 뷰포트에서 즉시 확인 가능합니다.

  • 레이어를 구현하는 머티리얼 함수에 특히나 유용한 기능으로, 그 함수를 사용하는 씬에서 모든 머티리얼에 있는 레이어에 대한 트윅 결과를 확인할 수 있기 때문입니다. 우클릭으로 상수를 빠르게 파라미터로 변환한 다음 손쉽게 트윅 작업한 뒤, 완료 후 원상복구시킬 수 있습니다.

머티리얼 함수에서 파라미터 노출
  • 이제 함수에 머티리얼 인스턴스 파라미터가 지원됩니다. 그 덕에 머티리얼 인스턴스에 파라미터를 노출시키기가 정말 쉬워졌습니다. 함수를 머티리얼과 동급으로 끌어내려서, 같은 노드 그래프를 어디서도 사용할 수 있게 된 것입니다. 유일한 예외라면, 원래부터 함수에만 있는 함수 입력과 출력 노드 정도입니다.

  • 참고로 머티리얼 안에서 파라미터는 이름별로 설정되므로, 그 머티리얼이 참조하는 각기 다른 함수에 'wetness' 라는 이름의 파라미터가 둘 있는 경우, 그 둘 다 머티리얼 인스턴스에서는 같은 값으로 덮어써집니다. 알고 쓴다면 의도적으로 쓸 수도 있지만, 파라미터를 공유하고 싶지 않다면 고유한 이름을 지어야 합니다.

애니메이션: 복수 몽타주 재생

지금까지는 스켈레탈 메시에 한 번에 하나의 몽타주만 재생 가능했습니다. 이제 원하는 갯수만큼 재생할 수 있게 되었습니다!

작동 원리는 이렇습니다:

  • 애니메이션은 이제 그룹별로 체계가 잡힙니다. 그룹별로 하나의 몽타주를 재생할 수 있습니다. 동시에 다른 몽타주를 재생하고 싶다고요? 새 그룹만 하나 더 만들어 주면 됩니다.

  • 슬롯 및 그룹 생성 기능을 페르소나에 새로 생긴 '애님 슬롯 매니저' 탭에 모아뒀습니다 (아래 참고).

  • 유효 슬롯 선택을 위한 드롭다운 UI 가 새로 생겼습니다. 더이상 애니메이션 슬롯 이름을 직접 입력할 필요가 없습니다.

  • 망으로 연결된 루트 모션 몽타주 재생시에는 여전히 한 번에 하나의 몽타주만으로 제한됩니다.

  • 새로운 몽타주 애셋과 슬롯 노드는 즉시 활용되도록 하나의 '디폴트 슬롯'으로 시작합니다.

애님 슬롯 매니저

  • '애님 슬롯 매니저'에서는 슬롯과 그룹 이름을 관리합니다. 계층구조식 뷰를 통해 편집이 가능합니다.

AnimSlotManager01.png

  • 그룹과 슬롯은 스켈레톤 애셋에 저장되어, 같은 패밀리의 모든 애님 블루프린트와 애님 몽타주는 같은 세팅을 사용합니다.

  • 편리한 '저장' 버튼이 매니저에 추가되어, 변경할 때 스켈레톤 애셋을 저장하겠냐고 에디터가 묻는 것에 더이상 놀라지 않아도 됩니다.

  • 슬롯 이름에 클릭하면, 컨텍스트 메뉴를 통해서도 다른 그룹으로 옮길 수 있습니다:

AnimSlotManager02.png

몽타주 트랙에서 슬롯 편집하기

몽타주 에디터의 뷰는 이렇습니다. 트랙 오른쪽의 콤보 박스에 주목하세요. 해당 트랙에 사용가능한 모든 슬롯이 나열됩니다.

EditingSlotsonMontageTracks01.png

새로운 슬롯 또는 그룹 이름을 만들어야 하는 경우, 확대경이 애님 슬롯 매니저를 대령해 드립니다:

EditingSlotsonMontageTracks02.png

상단의 상태 바를 통해 몽타주가 속하는 그룹을 알 수 있습니다. 이것은 첫 트랙의 슬롯으로 결정됩니다.

EditingSlotsonMontageTracks03.png

슬롯이 여럿인 경우, 상태 바는 셋업에 문제가 있는지도 알려줍니다. 예를 들어 다른 그룹에 속하는 슬롯을 섞어 쓴 경우, 작은 경고창이 뜨며, 그 위에 커서를 올리면 문제점을 자세히 확인할 수 있습니다.

EditingSlotsonMontageTracks04.png

애니메이션 블루프린트에서 슬롯 편집하기

  • 애님 그래프에서, 'Slot' 노드는 그 슬롯과 그룹 이름을 표시합니다:

  • 노드를 선택한 채 디테일 패널에 보면 몽타주 트랙 뷰와 동일한 옵션을 확인할 수 있습니다:

EditingSlotsinAnimationBlueprints02.png

  • 여기서 콤보 박스를 사용하여 기존 슬롯 이름을 선택하고, 확대경을 사용하여 애님 슬롯 매니저를 열 수 있습니다.

  • 주:

    • 이 기능은 기존 셋업과의 하위 호환성을 위한 것입니다. 기존 슬롯이 'Default Group' 의 일부가 된 것 이외에는 아무런 변화도 없을 것입니다.

    • '애님 슬롯 매니저'에서는 아직 슬롯/그룹 이름변경이나 삭제는 불가능하며, 나중에 추가될 예정입니다.

    • 몽타주 블루프린트와 C++ API 가 몽타주 애셋 레퍼런스를 받을 수 있게 되었습니다. 그 덕에 다수의 몽타주를 동시에 재생할 수 있게 된 것입니다. 업데이트된 "Set Play Rate" 함수를 예제로 살펴보시기 바랍니다.

모두에서 루트 모션

이제 언리얼 엔진은 복수의 애니메이션에서 블렌딩된 루트 모션을 지원합니다!

  • 애니메이션 블루프린트로 루트 모션 처리를 위한 여러가지 모드를 추가했습니다. 모드 설정은 애님 블루프린트 에디터의 "Root Motion Mode" (루트 모션 모드) 드롭 다운을 통해 가능합니다. 동적인 방식이 필요한 경우 코드에서 실행시간에 이 모드를 설정할 수도 있습니다.

RootMotion01.png

  • 옵션은 다음과 같습니다:

    • No Root Motion Extraction 루트 모션 추출 없음 - 루트 모션이 (루트 본에 적용된 채) 그대로 남아있습니다.

    • Ignore Root Motion 루트 모션 무시 - 루트 모션이 추출(되고 루트 본에서 제거)되지만, 캐릭터에 적용되지는 않습니다.

    • Root Motion from Everything 모두에서 루트 모션 - 루트 모션 처리를 위한 새로운 메서드입니다 (아래 자세히 설명합니다).

    • Root Motion from Montages Only 몽타주에서만 루트 모션 - 원래 루트 모션 방식(이자 모든 신규 블루프린트의 기본)입니다.

애셋의 루트 모션 셋업입니다:

RootMotion02.png

  • 애님 시퀀스에 새로 생긴 'Enable Root Motion' (루트 모션 켜기) 세팅이 있습니다. 이 옵션은 애님 몽타주에 있던 'Enable Root Motion Translation' / 'Enable Root Motion Rotation' 옵션을 대체합니다 (로드시 자동 업데이트됩니다)

  • : 애님 몽타주의 원래 세팅도 여전히 존재하며, deprecated (폐기) 마킹도 되지 않았습니다. 의도적인 것으로, 애니메이션 시퀀스에 제대로 전파되도록 하기 위함입니다. 더이상 페르소나에서 편집은 불가능하며, 아무도 그것을 읽고/쓰는 코드를 작성해서는 안됩니다.

모두에서 루트 모션:

  • 최종 캐릭터 포즈에 기여하는 각 애니메이션 애셋(시퀀스, 블렌드 스페이스, 몽타주 등)은 (루트 모션이 있는 것으로 설정된 경우) 그 루트 모션을 추출합니다. 추출된 루트 모션 각 조각은 포즈에 대한 소스 애셋의 기여 가중치에 따라 블렌딩됩니다.

RootMotion03.png

  • 예: 위 그래프에서 Jog_Loop_Fwd_RM 와 Jog_Loop_Right_RM 의 루트 모션은 각각 0.5 의 가중치로 블렌딩될 것입니다. 이 경우 결과 애니메이션은 사선 정방향으로 맵을 가로지르며 달리는 캐릭터가 됩니다.

  • 주: 원래 시스템(현재 'Root Motion from Montages Only' 몽타주에서만 루트 모션)은 네트워크 게임을 염두에 두고 디자인된 것이기에 함수성이 제한되어 있습니다. '모두에서 루트 모션'은 완전 무제한인 것으로 디자인되었기에, 네트워크를 통해 애니메이션이 리플리케이트되지 않는 게임에서만 사용할 것을 권장하는 바입니다.

애니메이션: '인간형 릭' 빠른 선택

  • 엔진에 내장된 Humanoid Rig (인간형 릭)을 선택하는 신기능이 페르소나에 추가되었습니다. 이 릭은 언리얼 엔진 마켓에서 접할 수 있는 애니메이션에 자주 사용됩니다.

HumanoidRigQuickSelect.png

새로운 블루프린트 에디터 메뉴

블루프린트 에디터 우클릭 메뉴의 검색 결과 정확도를 높이기 위해 작동방식 새롭게 디자인했습니다.

BlueprintEditorMenus01.png

  • 전과 마찬가지로 노드에서 끌어 놓으면 그 노드 유형에 직접 관련이 있는 노드가 표시되는 컨텍스트 메뉴가 뜹니다. 블루프린트 에디터의 개인설정에 새로 생긴 옵션을 사용하여 이 기능에 대한 환경설정이 가능합니다:

BlueprintEditorMenus02.png

더 커진 3D 월드

각 월드의 최대 크기가 대략 20 킬로미터에 달하도록 확장되었습니다. 또한 이제 (기존 2D 만 가능했던) 3D 월드 원점 이동도 지원합니다.

  • 이는 C++ 코드에서 'WORLD_MAX' 상수로 정의됩니다. (기존 약 5km 였으니) 네 배 향상된 것입니다.

  • 참고로 언리얼 엔진의 World Composition (월드 컴포지션) 기능을 사용하여 복수의 월드를 연결하면 어떤 크기의 월드도 만들 수 있습니다!

빨라진 패키징과 쿠킹

에디터 안에서 콘텐츠를 패키징하고 쿠킹하는 것이 훨씬 빨라졌습니다!

  • 에디터 안에서 쿠킹할 때, 더이상 새로운 프로세스를 불러올 필요가 없습니다. 즉 에디터에 로드된 애셋을 메모리에서 바로 쿠킹하여 처리 속도가 대폭 향상되었다는 뜻입니다.

  • 이 기능은 기본적으로 켜져있으나, 필요에 따라 'Disable Cook in Editor' 에디터에서 쿠킹 끄기 개인설정으로 이전 시스템으로 되돌아갈 수 있습니다.

내비게이션 메시 스트리밍

언리얼 엔진은 이제 미리계산된 내비게이션 데이터의 섹션을 요청에 따라 즉시 메모리에서 스트림 인/아웃 가능합니다.

  • 스태틱 내비게이션 메시 데이터를 각기 다른 서브 레벨에 저장하면 엔진은 그 레벨과 함께 이 데이터를 스트리밍합니다.

  • 기본적으로 내비게이션 볼륨과 교차되는 내비게이션 메시 부분은 그 볼륨이 배치된 서브 레벨에 저장됩니다.

언리얼 C++ 프로그래밍

단순화된 클래스 선언

  • 이제 클래스에 'normal' 보통의 C++ 생성자를 정의하고 사용합니다. 이제 파라미터 없는 생성자도 사용 가능합니다!

  • 프로퍼티를 에디터나 블루프린트에 노출시키는 데 더이상 카테고리를 지정할 필요가 없습니다. 이제 디폴트 카테고리가 생깁니다.

  • FPostContructInitializeProperties 가 폐기(deprecated)되었습니다. FObjectInitializer 로 대체되었으며, 실제로 필요할 때만 지정해 주면 됩니다.

  • 'GENERATED_BODY' 가 더이상 보호 레벨을 'public' 으로 리셋시키지 않고, 세팅을 보존합니다.

  • 'GENERATED_UCLASS_BODY' 대신 새로운 "GENERATED_BODY" 지정자를 사용해 주세요. 다음과 같은 여러가지 신기능을 사용할 수 있게 됩니다!

단순화된 형변환

  • 향상된 Cast() 함수를 사용하여 Unreal 클래스끼리 쉽게 형변환합니다. 심지어 인터페이스와 클래스 사이에도 형변환 가능합니다. 원한다면 Unreal 유형간의 형변환을 위한 dynamic_cast 도 지원합니다.

기타 C++ 개선사항

  • 델리게이트가 있는 C++ 11 lambdas 가 새로이 지원(아래 참고)되며, 새로운 (경량 lambda wrapper 인) TFunction 클래스도 지원됩니다.

  • TSubobjectPtr 을 제거하고 있습니다. 이상하고 혼동을 유발했었습니다. 이제 서브 오브젝트에 그냥 보통 포인터를 사용하세요!

  • 소스 파일에 구조체와 Enum 만 있는 경우, 더이상 '더미' UObject 를 합성할 필요가 없습니다.

UI: 게임 컨트롤러 지원

이제 조이스틱을 사용해서 UI 요소 사이를 이동 가능합니다!

  • 기본적으로 화살표키, 방향 패드 또는 왼쪽 조이스틱으로 이동 가능합니다. 여전히 Tab 또는 Shift+Tab 도 사용할 수 있습니다. 슬레이트와 언리얼 모션 그래픽 양쪽에서 작동합니다.

  • '키보드 포커스' 와 '컨트롤러 포커스' 개념을 '유저 포커스' 개념으로 통합시켰습니다. 유저 포커스를 바꾸면 해당 유저에 대한 모든 컨트롤러와 키보드에 영향을 끼칩니다.

UI: 컴포짓 폰트

슬레이트와 UMG 는 이제 폰트 패밀리와 컴포짓 폰트를 지원합니다. 이를 통해 실제로 다수의 서브 폰트로 구성된 폰트를 만들 수 있으며, 각 폰트를 각기 다른 글자 범위에 사용할 수 있습니다. 현지화된 텍스트 표시에 정말 유용합니다.

폰트 애셋

  • 컴포짓 폰트와 거기에 연관된 TTF 또는 OTF 폰트 파일 데이터 임베딩이 지원되도록 폰트 애셋 유형이 업데이트되었습니다.

  • 이제 폰트 애셋은 두 가지 캐시 방법을 지원합니다. 'Runtime' 실행시간은 새로운 컴포짓 폰트 방식이며, 'Offline' 오프라인은 기존의 미리계산된 폰트 아틀라스 방식입니다. 폰트 에디터에서 그 둘을 쉽게 전환할 수 있어, 기존 폰트 애셋을 대체하지 않고도 간단히 변환 가능합니다.

  • 새 폰트 애셋을 만들면 기본으로 빈 컴포짓 폰트가 생성되며, 콘텐츠 브라우저에 TTF 또는 OTF 파일을 임포트하여 컴포짓 폰트 애셋을 만들 수도 있습니다.

폰트 에디터

  • 폰트 에디터가 컴포짓 폰트 애셋을 생성할 수 있도록 업데이트되었습니다.

FontEditor.png

  • 컴포짓 폰트는 항상 디폴트 폰트 패밀리를 포함하며, 주어진 글자 범위에 사용해야 할 서브 폰트 패밀리를 몇이든 포함시켜도 됩니다. 각 폰트 패밀리 자체는 스타일별로 이름이 다른 폰트 다수로 이루어집니다.

  • 해당 글자 범위에 대해 폰트 패밀리에서 사용가능한 폰트에 따라 각 글자에 가장 적합한 폰트를 실행시간에 선택합니다.

  • 위 미리보기에서 확인 가능하듯이, 일본어 텍스트는 일본어 폰트 패밀리 글자 범위 안에 해당하므로, Roboto 가 아닌 Source Han Sans 폰트로 렌더링됩니다. 서브 폰트 패밀리의 폰트는 Regular, Bold, Light 의 경우처럼 이름 일치에 따라 선택되는데, Bold Italic 의 경우처럼 기본 폰트의 특성에 따라 일치하는 것으로 대체될 수도 있습니다 (폰트에 Bold 특성이 들어있고, 가장 잘 맞기에 Bold Japanese 폰트를 자동으로 선택했습니다).

언리얼 모션 그래픽(UMG)에서의 폰트

  • UMG 의 구형 인터페이스에 있던, 디스크에서 TTF 또는 OTF 파일을 지정하는 기능이 제거되고, 컴포짓 폰트 애셋을 선택한 다음 기본 폰트 패밀리에서 폰트를 선택하는 애셋 선택기로 대체되었습니다.

FontsInUMG01.png FontsInUMG02.png

  • 폰트 세팅에 따라 기존 파일을 잃게 되는 경우는 없지만, 앞으로는 UMG 에 폰트 애셋을 사용해야 합니다.

  • UMG 는 현재 '런타임' 캐시된 폰트 애셋만 지원합니다.

슬레이트에서의 폰트

  • C++ 기반 슬레이트 스타일 세트의 기존 폰트 코드도 정상 작동하나, 스타일 세트가 컴포짓 폰트의 이점을 활용하도록 업데이트해 보는 것도 좋습니다.

  • C++ 슬레이트 코드에서 컴포짓 폰트를 처리할 때는 폰트 애셋보다는 FStandaloneCompositeFont 를 사용할 것을 추천합니다.

  • 슬레이트 스타일 세트에 포함된 폰트 오브젝트가 가비지 컬렉터에 보이지 않기 때문입니다. 폰트 애셋을 직접 사용하면 FGCObject 같은 것을 사용해서 외부 레퍼런스를 직접 관리해야 합니다.

캔버스에서의 폰트

  • 캔버스는 양쪽 폰트 애셋 캐시 유형을 모두 지원하나, 저희 툴 일부에 대한 현지화 지원을 개선시키기 위해서입니다.

  • 신형 게임의 UI 에 캔버스를 쓰는 것은 추천하지 않으며, 그 대신 UMG 를 쓰시는 것이 좋습니다.

학습 자료

에디터내 도움말
  • 스켈레탈 에디터 길잡이 튜토리얼에서 창 포커스 관련 문제를 고쳤습니다.

API Documentation
  • New: Added some basic documentation to the stats system.

  • Fix comments for ProjectileMovement substepping.

  • Fix comment on Pawn::PossessedBy().

  • Improved documentation for ACharacter::Landed() / OnLanded() indicating that movement mode is still "falling" during this time, and pointing out alternate OnMovementModeChanged() event.

  • Added link for FString docs. Documented ESearchCase, ESearchDir.

  • Add or fix class descriptions for multiple framework classes.

  • Added comments/docs for FNavAgentProperties and FMovementProperties.

  • Improved docs for FVector, FVector2D.

  • Added/improved comments for ENetMode, EVariableReplication and linked to online doc pages.

  • Cleaned up comments in Object.h (skeleton definitions for core object module).

    • Added links to actual source files. Lots of times intellisense/VA will take you to the less helpful skeleton file rather than the actual source file.

  • FTransform class comments expanded to include description of how transformations are applied and composed. Similar changes to KismetMathLibrary::ComposeTransforms() as well.

  • Documentation for quaternions, explaining order of composition during multiplication.

Release Notes

Animation

  • New: Animation Preview Mesh

    • You can use context menu in Persona’s Asset Browser to select a specific mesh to preview the asset

    • This is useful when you have many different meshes per skeleton, but you only want to preview a set of assets with a specific mesh

  • New: Improved Animation Record Feature. Now you can click Record to capture animations up to ten minutes long. Press stop when you’re finished recording.

  • New: Added the option to specify an import-time transform to apply to static meshes, skeletal meshes and animations.

  • New: Added new check box for toggling display of skeleton retargeting options in Persona

  • New: Persona now automatically selects recently newly added sockets in the viewport.

  • New: When opening a derived animation blueprint the asset override editor will open automatically.

  • New: Relative and proportional linking added to elements in a montage to keep them linked to the segment they relate to.

  • New: Trigger weight threshold for notifies exposed in details panel.

  • New: Changed "Layered Blend per Bone" node to start with 2 pose pins by default and added an "Add Pin" button

  • Changed 'Create' menu names of Blendspaces to be consistent with other parts of the editor.

  • No longer leave extra space at the end of anim segments in open montages making the animation freeze after a reimport.

  • Fixed crash on "Reset All" in Rig Asset

  • Fixed crash when saving retarget base pose when cloth exists.

  • Fixed retargeting crash when multiple meshes exists per skeleton.

  • Fix for compression data in animations being missing if the skeleton GUID did not match the cached GUID in the animation.

  • Fix for issue where skeleton would get dirtied on load when opening in Persona (was caused by the setting of the preview mesh).

  • Fix Montage root motion preview in Persona.

  • Fixed an issue with retargeting when bones are missing.

  • StateMachine : Fixed an issue with entry state is always active in the first frame. Now it should activate appropriate state.

  • Fixed AnimNotify State crash when Blueprint derived AnimNotify is being compiled.

  • Fixed display of slot name on a slot node (Would show none even when a slot name had been selected)

  • Fixed a crash when retargeting skeleton that has different order with target skeleton

  • Fixed animation retargeting crash when preview mesh is missing.

  • Fixed a crash in AnimationBlueprints when a transform bone node in parent space was used on a root bone.

  • Fixed potential quaternion normalization assert on long bone chains when using Mesh Space blend per weight.

Audio

  • New: Added config setting to control audio volume when app is unfocused

  • Fixed issue where interior volume would pop to target value instead of ramping in over time.

Automation

  • New: The map performance in editor test will now wait for the shaders to finish compiling before capturing the data.

  • New: Added support for parsing non-versioned build numbers to FEngineVersionSupport.FromString

    • To allow for these non-versioned build numbers to be parsed, pass bAllowNoVersion=true as a parameter (optional, defaults to false)

    • Non-versioned build numbers consist of a branch name and changelist number in the form ++depot+UE4-ProductName-CL-12345678

  • New: Added -archivemetadata option to BuildCookRun to copy build.properties files to archived build destination. Useful for tracking what changelist was used to make a build.

  • Internationalization smoke tests are disabled as a work around to the editor appearing in Japanese when an unsupported culture is selected for the editor UI.

  • Fixed an issue that was causing BuildCookRun automation to default the cultures to stage to English despite configuration.

  • Staging a culture now properly stages the necessary parent cultures.

  • Fixed a duplicated comment in the code.

  • Refactored the map editor performance test so that it's more efficiently grabbing and storing the editor performance data.

Blueprints

  • New: Switching between Component and Graph modes will reselect previously selected items in the modes.

  • New: Can replace missing property nodes with local variables by right clicking.

  • New: More detailed and accurate compiler profiling results. Also added an option to the Blueprint editor preferences for turning on additional details in the Compiler Results tab. Turning this on will result in a detailed, hierarchical summary of event timings for the Blueprint that was just compiled.

  • New: Blueprint variables now have to be marked public/editable to be accessible from other blueprints

  • New: Orthographic view options have been added to the Blueprint editor preview in Components mode.

OrthoViewBlueprintEditor.png

  • New: Added an error tolerance input to "Equal" function node for vector/rotator types.

    ErrorTolerance.png

    • This pin defaults to a small epsilon value that helps to ensure equality when values don't exactly match due to floating-point precision errors that can arise during processing.

  • New: Boolean select nodes now display True/False for their pins.

  • New: Added keywords to Set/GetActorLocation, AddActorWorld/LocalOffset and AddLocal/WorldOffset.

  • New: Exposed text-related functions on TextRenderActor

  • New: Double clicking on variable get/set nodes that have a rep notify graph will jump to the graph.

  • New: Renaming SaveCachedPose nodes will now automatically update any UseCachedPose nodes referencing it.

  • New: Can right click on any get/set variable node to replace with another variable.

  • New: Object pin connections will now auto-generate a conversion node when going into a class input pin.

  • New: Can double click on Blueprint compiler error logs to jump to the offending node.

  • New: “AutoCreateRef” is handled in UK2Node_CallFunction::ExpandNode. The additional variable is created in local scope.

  • New: New Blueprint compiler option to jump to error-producing nodes (on compile).

  • New: Added new events that GameInstance Blueprints can handle: NetworkError and TravelError.

    • You can use these events to gracefully handle these errors, for example, by displaying a custom message to the user.

  • New: Interface message nodes can now be used for pure/const functions.

  • New: Can now use cast nodes to convert from an interface pin to an explicit object type.

  • New: New save-on-compile option that will automatically save Blueprints as you work on them.

  • New: GetAllActorsOfClass nodes now change their output type according to the class you pick.

  • New: Can now create blueprints from vert-painted meshes in the world (painted vertex data is copied over).

  • New: Reinstance Only When Necessary:

    • Added mechanism to distinguish if instances of recompiled BPGC must be reinstanced or not during recompilation (e.g. adding a new function or variable)

    • When not needed, we skip reinstancing after compilation, which cuts out significant time from the compilation process

  • New: For the new blueprint menu system, user can now specify a node's category/name/tooltip directly in GetMenuActions().

  • New: New Blueprint editor preference setting that can be used to toggle on/off the "Target" of the Blueprint context menu.

  • New: Can now toggle cast nodes to have execution pins or not (allows casts to be used in anim graphs). NOTE: the cast could still fail and return an invalid object.

  • New: Users can now hook into the Blueprint editor and provide their own hot-key commands (through FBlueprintEditorModule::GetsSharedBlueprintEditorCommands).

  • Reduced the wastage on the graph clipping guard band from half the size of the graph each edge to quarter. This is intended to make the clipping more aggressive ideally with no visual difference to make it more performant.

  • Minor fix to prevent the documentation tooltip from moving when you try to click on a link in composite nodes.

  • Fix for issue with namelist values not syncing first value to the pin. If the initial value does not match the pin value, the pin value gets synchronized to the value displayed in the UI.

  • Curve graph min and max are now preserved during blueprint changing/saving.

  • Math Expression graphs are now read only.

  • Fixed crash when compiling Animation Blueprint while animation Property Matrix was open.

  • Pins can no longer be added/removed from boolean select nodes.

  • Crash fix for placing math expression nodes in macro graphs

  • Actor Blueprints will correctly open the first time in Components Mode and subsequently in Defaults if data only

  • Propagation of default rotation transform values during live editing.

  • Prevent copy/duplicate of component nodes not marked as BlueprintSpawnable.

  • Excessive compile times due to chained child classes during reinstancing.

  • Do not allow unsafe functions to be placed in a construction script.

  • Removed a redundant node construction pass on Blueprint graph panel updates. Cuts panel update time roughly in half.

  • Don't mark Blueprint packages dirty on streaming async loads.

  • Added a delegate to hook up any nodes that require to be notified when input action or axis mappings change, so they can refresh the Blueprint action database

  • Moved the error message for Array functions to the bottom of the node.

  • Any latent action nodes derived from BaseAsyncTask are now supported in macros.

  • We now support making FText an exposed on spawn parameter.

  • The default output pin on switch nodes now shows as an exec pin, not an output pin

  • UEdGraphSchema_K2::GetFriendlySignitureName spelling corrected to be GetFriendlySignatureName

  • Cleanup tooltips for blueprint nodes whose comments contain @param entries

  • Added some clipping for connections in blueprints in an attempt to address performance issues on large graphs.

  • Changed some Blueprint compiler errors to make them more understandable.

  • Fixed erroneous "Failed to load Super / Parent" linker warnings when recompiling Blueprints on load

  • Blueprint nodes in the "online" category will now use the correct online subsystem instance corresponding to the Play In Editor window in which they run.

  • Changed logic for hiding the target pin on a pure node to take into account the compatibility of the BP and the function, allowing pure functions on an incompatible target to be callable when dropped from the palette

  • Adjust style of 'parent class' hyperlink and add some more padding between it and the search box

  • SpawnActorFromClass uses the original tooltips for properties marked "ExposeOnSpawn".

  • Only copy the "advanced view" state of pins when reconstructing nodes if users can edit the advanced state. Otherwise changes to metadata advanced pin state don't get propagated.

  • Crash when modifying data layout of instanced UserDefinedStruct

  • Crash while compiling blueprint after editing construction script

  • Crash occurs when making a new blueprint after deleting one with the same name.

  • Crash when duplicating BP based on object, with single member variable of struct type.

  • UberGraphPersistentFrame code can be disabled by setting USE_UBER_GRAPH_PERSISTENT_FRAME define false. The UberGraphPersistentFrame is used for skipping reinstancing when the class has not structurally changed.

  • UserDefinedStruct - properties won't be (unnecessarily) reloaded by linker

  • Static Function have WorldContext parameter only when it's necessary

  • ExpandNode functions don't check if it's called during full compilation. The function should be called only when necessary.

  • Fix for a rare crash that would happen when compiling a Blueprint with a ChildActorComponent.

  • Can no longer create a BSP Brush Blueprints.

  • Can no longer reference BSP Brushes in level blueprints.

  • Fix for crash cooking maps with blueprints that change atmosphere parameters in the construction script

  • Fix for crash that would occur when a node type was deleted from code (and there were Blueprints that used that node).

  • Fix for a crash that would occur when the member referenced by a CallOnMember node was deleted.

  • Fix for crash that involved variable/function nodes not being able to find the referenced variable/function.

Core

  • New: Lambda support in delegates and slate

    • Delegates gain CreateLambda and BindLambda.

    • Slate gains Attribute_Lambda and Event_Lambda.

    • Supports variable capture, but avoid capturing TSharedRef/Ptr as you can easily cause reference loops.

  • New: TFunction and TFunctionRef.

    • TFunction acts like std::function, allowing lambdas to be passed around and owned.

    • TFunctionRef acts like a non-owning std::function, and should only be used for efficiently passing lambdas to non-template functions which only want to invoke the lambda at the call site, not take ownership of it.

  • New: New debugger visualizer for TOptional.

  • New: If you have two projects with the same name in engine directory tree UBT will warn you about it.

  • New: Added ability to use long package names with the -map flag when cooking.

  • New: There is a new feature that is calling StartupModule method during engine initialization. To use it just set bIsAutoStartupModule = true in module rules constructor.

  • New: Added option to limit number of jobs to UBT.

  • Added module generated include directory to ShouldExportClassesForModule in UHT.

  • New: Added script integration helpers to UObject system.

  • Documented TArray methods.

  • New: Now WIDECHAR FString and FName classes don't create temporary objects during comparison with ANSI char.

  • New: Added FMath::GetReflectionVector(Direction, SurfaceNormal) for calculation of ray bouncing.

  • New: Now the category isn't required for UPROPERTIES. If not present it is set to class name it was defined.

  • New: Splitted out DB access classes to separate module and added SQLiteSupport module which allows you to easy integrate SQLite into Engine.

  • New: GameName redirects can be added dynamically.

  • New: A Pak file can now be constructed with UnrealPak.exe by specifying a directory to build.

  • New: Can now specify to compress or encrypt all files in a Pak file when running UnrealPak.exe via the commandline.

  • New: FPakFile can now be initialized from an existing Archive rather than only by filename.

  • New: Plugins can have config files now.

  • New: Efficient construction and appending of TArrays of different types.

    • A TArray of one type can now be constructed from or appended to a TArray of another type, if the types are assignable.

    • The implementation will do the copy as efficiently as it can work out, e.g. appending a TArray to a TArray will memcpy the elements.

    • The new TIsBitwiseConstrictuble trait can specialized for your types if the types can be memcpy'd in this way.

  • New: Stats

    • Added better mechanism for flushing the stats messages, should reduce the amount of the stat packets, will also reduce the memory usage, improve performance, will happen only once per frame

  • New: Stats

    • Added command 'stat toggledebug' - toggles tracking the most memory expensive stats

  • New: Moved STAT_FindObject(Fast) to STATGROUP_ObjectVerbose which is disabled by default, should improve memory usage.

  • New: Added explicit flush for stats after startup the rendering thread to improve memory usage

  • New: New console commands

    • Added a command "Obj MemSub -class=[classname] -cull=[no of kb]" that prints memory stats for all objects of the specified class, this is inclusive stats, includes all subobjects.

    • Added an option " -class=[classname]" to "Obj Mem" command, which tries to narrow results to the specified class.

  • New: Internationalization data presets can now be selected from a limited number of presets in order to minimize the amount of ICU data packaged for products.

  • New: Added preallocating memory to TMaps

  • New: Moved STAT_FindObject(Fast) to STATGROUP_ObjectVerbose which is disabled by default, should improve memory usage

  • New: Implemented GetAllocationSize() for FMallocAnsi

  • New: Variadic template implementations of C++ delegates

  • Deprecated TArray::FindMatch as it was doing the same as TArray::IndexOfByPredicate.

  • UHT was generating bad function declarations while passed by const reference parameters.

  • Fixed a use-after-free bug in FInternationalization.

  • Change module load order to ensure that SlateRHIRenderer can shutdown without crashing.

  • Added more transparency what set a console variable the last time (cvar name in the console shows it)

  • Changed console variable Set() behavior: Each Set should specify a priority, order no longer matters if the priority is higher (solved a lot of corner cases), might need some iterations.

  • UE4 project Win32 editor builds was still allowed by UBT, which is not supported. Fixed.

  • Fix retrieving the host name from the workspace and infinite loop when discovering unspecified Perforce setting.

  • Fix for static initialization order of debug visualizer delegates

  • Fixed non-safe threading calls to the SlowTask system which was causing cooker crashes.

  • Fix for available sessions not getting updated in UFE due to FDateTime::UTCNow / FDateTime::Now mismatch

  • Generated code fix for UFunctions which take enum classes as parameters.

  • Better error message when using an IInterface* is used as a property, suggesting the use of TScriptInterface instead.

  • Operator new/delete overrides added for platforms supporting noexcept().

  • Fixed crash caused by ICU break iterators persisting beyond ICU shutdown

  • Fixed a mistake in an error message pointing the user to the wrong ini file.

  • Fix HeaderParser so it no longer removes valid uses of "", " ", etc from within comments when generating tooltips. Only asterisks from the beginning of lines following only whitespace are removed.

    • For example: "A * B" within a java-doc comment used to become "A B".

  • Added version of LerpStable() that works with floats, not just doubles as before.

  • Performance: only add prerequisite to tick function if that function itself can tick.

  • Fixed stats crash on iOS

  • Added missing SendSeekMessage to the Seek for the writable FStreamingNetworkFileHandle.

  • Fixed converting stats to csv

  • SetStoredValue/GetStoredValue uses platform specific implementation (fixed regression)

  • Stats - Fixed a crash when the verbose group contains non-cycle stats, also fixes an issue with the missing data

  • Fixed an issue with copying tick function references

  • UObject

    • Made code thread-safe when TRACK_BULKDATA_USE is set to 1

  • Text localization resources can now be loaded from directories using hyphenated culture names, rather than only those using underscores.

  • ICU memory usage has been greatly improved by caching data files once when needed.

  • Localization data now falls back on parent culture data based on language, script, and region combinations.

    • Language_Script_Region, Language_Region, Language_Script, Language

  • Localization data for Simplified Chinese has been renamed from "zh-Hans-CN" to "zh-CN" to conform to conventions.

  • The DLL search paths now include all game, plugin and engine folders. Module DLLs in different output folders can now implictly link against each other without requiring a specific startup order.

  • Fixed bad comments regarding SIZE_T

  • Fixed issue in parsing DEPRECATED macro by UHT when deprecating classes and structs.

  • Fixed unnecessary full rebuilds on case insensitive file systems.

  • Fixed syntax error in TMultiMap::MultiFindPointer.

  • Moved delegates referencing UObjects from FCoreDelegates to FCoreUObjectDelegates.

  • Disabled deprecation warnings in all code generated by UnrealHeaderTool

  • Fixed minor TBasePlayerControllerIterator code inconsistency

  • Removed various unused C++ macros from header files

  • Speed up to UnrealPak when scanning files added to a pak file.

  • New: Use perfect forwarding for task graph, plus some lambda work for shadow rendering.

  • ICU data has been relocated from Content/Localization to Content/Internationalization.

  • Test builds now have asserts enabled if shipping builds also have them enabled.

  • Improve error message when running UnrealHeaderTool fails (showing a human-readable version of the error code)

  • Removed unused bChangesTopology member from FPropertyChangedEvent and removed most uses, in preparation for deprecating the three-argument constructor

Editor and Tools

  • New: Expand Action/Axis mappings when clicking + buttons to add a new one

  • New: Output Log window now saves what you typed in between sessions (like the in-game console did)

  • New: Added a new “2D Pixels” Texture Group, intended for non-scaled, non-mipmapped, non-filtered textures in 2D Games.

  • New: You can now create new assets right from the Asset Picker that appears when choosing an asset to use. The menu combo box now contains "New asset" entries where appropriate.

  • New: The main “Window” menu has been reorganized for improved usability!

    • Sectioned and labeled based on the current editor

    • Experimental tools have their own section

    • Undo History has been moved to the Edit menu

  • New: The context menus in Content Browser have been reorganized for improved usability!

    • The "Details" option has been replaced with an "Edit" option for all assets

    • Source Control options have moved to a sub-menu to reduce size

    • Less common asset actions have been moved to a sub-menu

    • Imported assets all have options for reimporting, locating, and opening the original source. These work even when multiple imported assets of different types are selected.

  • New: Mesh merging tool supports mirrored meshes

  • New: Component visualizers can now override DrawVisualizationHUD to do 2D visualizations as well.

  • New: Class Viewer (and Picker) will now display UMG, Blutility, and GameplayAbility Blueprints (both loaded and unloaded)

  • New: Experimental iterative cooking: Including support for ini changes and DDC version changes invalidating cooked content. (Added “-iterate” command-line option for editor)

  • New: Packaged games on Windows now include an executable in the root directory which will install any missing prerequisites before running the game.

    • Content-only games can now customize their application icon using the packaging settings dialog in the editor.

  • New: UE4 prerequisites installers now support Windows XP, Windows Vista, and 32bit Windows 7.

  • New: Project settings now have the option to mark a project for chunk generation when packaging. Supports PS4 PlayGo, Xbox Streaming Install, etc.

  • New: Adding a curve linear color struct that can be added as a property and edited in details panel.

    • Integrated from PR #529 by inside

  • New: Added pre-compile event for editor tools.

    • Added callback in Persona to clean up running blueprint notify states before a recompile.

  • New: PkgInfo -export -simple now supports sorting.

  • Multi-Line text properties: Enter now commits the change. Shift+Enter is required to enter a new line.

  • FBX import error for rigid meshes updated to show correct parameter

  • Added back the current file display to the FBX import UI

  • Re-added ability to import only animation from a skeletal mesh FBX file

  • Fixed auto-wrapped text in the tutorials list never growing again if it was shrunk

  • Made the Super Search appear as an overlay rather than be its own window to address an issue where the active IME context was being deactivated

  • Cook on the fly stability fixes and performance improvements.

  • FLevelEditorViewportClient::GetWorld now returns the correct World when in Simulate mode.

  • The x64 UE4 Prerequisites installer will now install vcomp100.dll

  • UE4 Prerequisites 64bit installer will now warn users when run on a 32bit OS

  • UE4 64bit prerequisites installer will now install vcomp100.dll

  • UE4 prerequisites installers will now check for Windows Installer v4.5

  • Fixed an issue where the level save-as functionality would fail to delete the asset you are saving over.

  • The Asset registry no longer prematurely reports that it is done discovering assets.

  • Fixed a bug preventing one Play In Editor instance from traveling to a new map when connecting to a host in another Play In Editor instance.

  • Fixed a bug that was causing different Play In Editor instances to use the same online subsystem instance.

  • Fix loctext key collision that broke mobility combo button tooltips

  • Fix typo in MapCheck_Message_SimulatePhyNoSimpleCollision message

  • Fixed a crash typing in the output log when a PIE window is open

  • Fixed keyboard focus issues in the editor when a modal window is open

  • Fixed importing SpeedTree files attempting to generate lightmap UV's instead of using the ones from the SpeedTree file

  • Fixed alpha values not appearing by default in the color picker

  • Fixed the download link for Visual Studio 2013

  • Fixed a crash when deleting level assets from the content browser

  • Fixed the FTransform details panel customization swapping roll and yaw values.

  • Fixed the Auto-Generate Lightmap UVs setting in the FBX importer being ignored

  • Fixed a crash when blueprints attempt to recompile and refresh a details panel when the details panel is in the middle of an operation

  • Fixed the startup movie player keeping Slate widgets alive when no movie was playing

  • Fixed orthographic viewports defaulting to lit

  • Added proper material picker to BSP surfaces

  • Optimisation for setting unique actor names on multiple objects

  • Fixed some maps not being properly included in the packaging process

  • Fixed issue with roles command line not being passed to the game when executing the game via UAT

  • Fixed initial map not being set correctly when utilizing the Launch On or Cook in Editor features

  • Fixed multi-second hitch on BSP operations when map has navigation system enabled

  • Fixed case where foliage could be painted with a wrong scale

  • Fixed an editor crash caused by handling the key down event while some parts of the editor are already initialized, but GEditor is still NULL.

  • UnrealSwarm during pushing files to the client machine treated optional files as required and this caused errors sometimes. Fixed.

  • Fixed "Failed to find object 'Class None'." warning during some tutorials.

  • Various improvements to make the editor network usability easier to understand

  • PIE client/server window position/size tries to remain within the confines of the desktop area

  • Multiprocess PIE(viewport) client can now connect to a server.

  • Fixed Behavior Tree Editor crashing on selecting a service node

  • DataTable - UObjects are handled properly while reconstructing.

  • MallocProfiler2: Added support for files larger than 4.0GB

  • UnrealBuildTool is automatically built when generating project files using the shell extensions for the first time.

  • Change the CycleTransformGizmoCoordSystem default key equivalent on Mac OS X to Ctrl+~ as Cmd+~ is already used by OS X for window cycling.

  • The texture compression type, TC_EditorIcon now appears as TC_UserInterface2D

  • UFactory::ValidGameNames removed.

  • Exposed ProjectHasCodeFiles, GenerateBasicSourceCode, GetCurrentProjectModules and DetermineModuleIncludePath from GameProjectGenerationModule.

  • Improved feedback when an internationalization archive fails to load during localization resource generation.

Landscape
  • New: Landscape holes are now supported on mobile platforms (OpenGL ES2)

  • New: We now support importing height maps that don’t match the landscape dimensions. (It will be padded/clipped to fit automatically)

  • Fixed missing Foliage and Landscape tooltips

  • Fixed foliage tool crashes when using the reapply tool with Z offset and fixed erase density and reapply density features.

  • Fixed cases where World Composition map doesn't work properly when traveled to from another map while in Play mode

  • Fixed an ensure warning when using the foliage mode select tool on an InstancedStaticMesh created in a blueprint.

  • Fixed spline component bounds for the case of having no splines (was world 0,0,0 before)

  • Fixed Landscape Ramp tool corruption if the bounds of the ramp go outside the landscape bounds

  • Fixed "Dragging 'New Landscape' Rotation Z slider does not update real-time"

Material Editor
  • New: The “Custom” material node now works with TextureObject (removed old “Custom Texture” node as it's no longer needed.)

  • Make sure materials created from textures don't end up with overlapping expressions

  • Prevent Const material parameter values from crashing

Persona
  • Section bars no longer move small amounts when the user clicks near them.

  • Fixed issue causing Persona hover previews to not update, showing a still frame from the animation.

Scene Outliner
  • Fixed scene outliner actor counter not reporting accurate actor counts

Static Mesh Editor
  • New: Creating new static mesh collision enables collision view (if not already enabled)

Source Control
  • Fix a memory corruption bug when using source control to revert assets.

  • On Mac OS X you can actually open the File > Connect to source control... dialog while a modal window is open, which should also be modal otherwise it won't display.

UI
  • New: UMG: Designer now supports multi selection

  • New: UMG: You can now open a Widget directly by double-clicking its entry in the Palette view

  • New: UMG: Added "Edit Blueprint" to right click menus for custom widgets throughout the UI

  • New: UMG: You can now provide a helpful description for a Widget Blueprint in its Blueprint Properties. This will show up as the tooltip for the widget in the Content Browser and Palette.

  • New: Added the ability to toggle text wrapping in a UMG multi-line text block. Auto-wrap is enabled by default.

  • New: Icons for the various play in editor models have been updated to a more consistent style.

  • New: Added a tooltip to show multi-line descriptions in the source control history.

  • New: Adding a Play Sound function to User Widgets.

  • New: Added a missing setting on a matinee actor to allow the game HUD to be hidden.

  • Fixed not being able to animate some Slate color properties in UMG UI editor.

  • Fixed Auto-Key working in UMG when no animation has been created.

  • Fixed not being able to save UMG widget blueprints in when a widget was used with an animation.

  • Fixed aliasing on UMG selection highlights.

  • Fixed UMG widgets clipping outside of viewports.

  • Fix for By the book not working in simple profiles.

  • Updated icons for the various play in editor modes. additional update.

  • Missing class icons in some windows will use the "default" object icon again

  • Project Launcher UI is now robust enough to handle variant list corruption.

  • Fix for launched game sessions not showing up in the session manager.

  • Changed the default configuration for new launch profiles to be development.

  • Making all the getters/setters on UWidget use "GetCachedWidget" instead of messing with "MyWidget" directly.

  • Making Sort work on TPanelChildren.

  • Fixed crash on destruction of Slate material brush

  • Converted SWidget::RenderTransform into a TOptional for performance reasons.

  • Fixed not being able to exit immersive mode once entering it.

  • Fixed issue where Cultures to Stage in Project Packaging Settings would sometimes not save to file when changed.

Framework

  • New: Expose ParticleSystemComponent OnSystemFinished delegate to blueprints

  • ULevelBase has been eliminated.

  • New: Added support for tutorials to be able to focus on some tabs in asset editors.

  • New: Added code to pass VertexColor in material CanvasTileItem to rendering code so this parameter can be used with materials rendered using CanvasTileItem

  • New: GameViewportClient::Tick is now virtual

  • New: UGameUserSettings::ApplyNonResolutionSettings is now virtual.

  • New: All AZERTY keys can now be represented by EKeys and bound to action/axis mappings, directly to input components, and through blueprint interfaces.

    • EKeys::Underscore and Quote now map to the keys where the underscore or quote is the unshifted value (as on an AZERTY keyboard), Hyphen and Apostrophe respectively should be used instead.

  • New: UPrimitiveComponent::SetCullDistance is now callable from blueprints as Set Max Draw Distance

  • New: GameMode properties MinRespawnDelay, NumPlayers, NumTravellingPlayers, NumSpectators, and NumBots made blueprint readable. MinRespawnDelay also editable from GameMode defaults.

  • New: GameInstance initialization and shutdown improvements

    • Make UGameInstance::Init execute for both PIE and Standalone

    • Redirect current UGameInstance::Init to ::InitializeStandalone and ::InitPie to InitializePIE, both of which are now non-virtual.

    • Added UGameInstance::Shutdown to allow execution of behaviour on shut down of the game instance (analogous to EndPlay for EndPlayInEditor and Quit on Actors)

    • Expose blueprint implementable events for Init and Shutdown.

  • New: Added reference bone pose overrides to FSkeletalMeshMerge.

    • FSkeletalMeshMerge::DoMerge() now takes an optional array of FPoseOverride structures.

    • FPoseOverride specifies the bone to override in the merged mesh with the corresponding bone in a specified source mesh.

    • This allows more flexibility in building the merged skeleton from source meshes with differing reference skeletons.

  • New: Added ENGINE_API to ACameraActor, allowing it to be derived from in game projects.

  • New: Added Vector functions: ProjectOnToNormal(), VectorPlaneProject()

  • New: Change ProjectileMovementComponent::ComputeMoveDelta() to use ComputeVelocity() rather than ComputeAcceleration() to update the position.

    • This allows custom implementations of changes in velocity to directly affect the simulation, without the need to also compute the acceleration.

  • New: Exposed various flipbook asset methods to Blueprints.

  • New: Added map check warning for sprite and flipbook components that use non two sided materials.

  • New: Improved comments/tooltips for BreakHitResult in the editor. Add 'Time' value to the output.

  • New: Add static FName for "DefaultProjectile" collision profile.

  • New: Added constructor for FWalkableSlopeOverride that takes both editable properties.

  • New: Added SetWalkableSlopeOverride() to PrimitiveComponent and FBodyInstance to make it easier to set up overrides, and to be able to change it at runtime in blueprints.

  • New: Better AirControl support, allowing movement towards potentially unwalkable surfaces but still restricting boost so you can't wall climb.

    • This allows players to dodge towards vertical walls more effectively, and also steer laterally down unwalkable slopes rather than taking away all air control in these cases.

    • HandleSlopeBoosting() now prevents upward boosts no matter the incoming velocity. We used to only limit it if moving upwards, but you can deflect upwards when moving horizontally or downward, which bypassed that check.

    • HandleSlopeBoosting() used to send the player straight down if hitting the side of a step. This has been removed since this is now checked in falling movement.

  • New: AITestSuite module has been created to facilitate unit-testing-like testing of AI code.

  • New: ProjectileMovementComponent: friction when bouncing has a new optional behavior. Fixed sliding/rolling code and exposed more related variables.

    • New projectile friction mode when bouncing modifies friction based on the normal force from impact (higher when perpendicular, lower when glancing). Enable 'bBounceAngleAffectsFriction' to turn on this new behavior.

    • Default friction behavior when bouncing remains the same as before.

    • Added 'bIsSliding' to indicate if the projectile is sliding/rolling, and fixed behavior with multiple impacts between frames. Fixes friction behaving inconsistently depending on the framerate.

  • New: Fixes to projectile movement uses of friction, and improvements to behavior when sliding along a surface, to remove variance under different timesteps and to apply consistent friction.

    • Sliding movement now considers the acceleration (in any direction, not just gravity) and handles it in a new function: HandleSliding().

    • Friction is applied correctly when movement is parallel to and impacting a surface ("sliding").

  • New: Add enum controlling MovementComponent plane constraint / axis-locking behavior. Modes are: custom, X, Y, Z, and an option to use the global physics axis setting.

    • The option to use the global physics setting makes it easier to keep multiple blueprints using the same plane constraints.

  • New: Fixed FVector::Parallel() and added FVector::Orthogonal().

    • Add FVector::Orthogonal() for determining if two normals are orthogonal / perpendicular within a tolerance.

    • FVector::Coplanar() now takes a threshold for controlling the parallel test.

    • Add THRESH_NORMALS_ARE_ORTHOGONAL for orthogonality test.

    • Rename THRESH_VECTORS_ARE_PARALLEL to THRESH_NORMALS_ARE_PARALLEL, and change the meaning to the cosine of the angle we compare to.

    • Fix FVector::Parallel() reporting false for parallel vectors pointing in opposite directions. Use FVector::Coincident() if you care about the direction.

  • New: Improvements to Blackboards's Blueprint interface

    • GetBlackboardValueAsRotator and SetBlackboardValueAsRotator have been exposed

    • A single function for clearing Blackboard's key value has been added

  • New: Vehicles can now perform RVO avoidance

  • New: Fixed updating bounds of NavRelevantComponents after moving owning actor in editor

  • Fixed broken camera rotation when ending pie. Camera should now remain where it was at time of ending.

  • Added code to fixup incorrect \'s in Documentation actor link field.

  • Added code to replace \ with ./ in documentation actor links

  • Revised code that checks validity of links in a documentation actor.

  • Fixed clicking on Document links in documentation actor opening 2 pages

  • Fix a use-after-free bug in USkeletalMeshComponent.

  • HitBox hit tests now work correctly on laptops with touchscreens.

  • Changed 'FGameplayAbilityTargetData_SingleTargetHit::GetEndPoint()' to return 'HitResult.Location' instead of 'HitResult.ImpactPoint'.

  • Fixed 'FGameplayAbilityTargetData_ActorArray::GetOrigin()' to return the correct rotation.

  • 'GameplayAbilityTargetActor' now checks the ability's Avatar when deciding it's net relevancy.

  • Blueprint added components that have native defined subcomponents are now properly registered during reconstruction.

  • World teardown now occurs in GameEngine::PreExit instead of HandleExitCommand.

    • SlateApplication shutdown now occurs after Engine and App PreExit

  • Don't display events that are not valid for Emitters in blueprint context menus.

  • Fixed calculation in DrawDebugCylinder flagged on UDN which was doing float math with integers which resulted in incorrect behavior.

  • Don't call SetIsReplicated in constructor, just set bIsReplicates directly

  • SSpinBox no longer teleports the cursor to a random position on the screen.

  • Fixed mouse input being a frame late.

  • Synthetic slate mouse moves no longer caused erroneous tool tips to appear.

  • Fixed issues (particularly on Mac) seen when moving mouse out of the viewport while holding left mouse button down when using the mouse as touch.

  • Fixed issue where the mobility of parent/child actors could end up out of sync with one another.

  • Actor ReplicatedComponents array is now properly updated and kept in sync with OwnedComponents

  • Correct issues with calling order of cleanup functions for components

    • BeginDestroy calls ExecuteUnregisterEvents before OnComponentDestroyed

    • UninitializeComponent now gets called from DestroyComponent

    • InitializeComponent will be called by RegisterComponentWithWorld if its Owner Actor is initialized

    • SceneComponent now overrides OnComponentDestroyed instead of DestroyComponent to do ScopedMovementStack and Detachment ensuring UninitializeComponent is consistently called before UnregisterComponent

  • Fixed actors with native root component moving to 0,0,0 when undoing a transaction when it also has certain types of blueprint added components

  • Fixed issues where GetMousePosition returned true when mouse was outside the viewport.

  • FSkeletalMeshMerge will now merge vertex colors, if vertex colors are used in one more of of the source meshes.

  • Fixed memory leak in FPhysicsScene2D

  • Removed incorrect bWillEverBeLit=false in 2D sprite render scene proxies

  • Fixed path following in CharacterMovementComponent, so that it turns more quickly and considers current velocity when trying to reach destination speed.

    • Restored "bRequestedMoveUseAcceleration" which can be set to false to disable acceleration and use requested pathfinding velocity directly (instant turning).

  • APlayerController::PostProcessInput() uses IsLookInputIgnored() virtual rather than reading IgnoreLookInput variable directly.

  • Fixes to projectile movement uses of friction, and improvements to behavior when sliding along a surface, to remove variance under different timesteps and to apply consistent friction.

    • Sliding movement now considers the acceleration (in any direction, not just gravity) and handles it in a new function: HandleSliding().

    • Friction is applied correctly when movement is parallel to and impacting a surface ("sliding").

  • MovementComponent auto registration of tick function moved to OnRegister() rather than InitializeComponent().

  • ProjectileMovementComponent velocity initialization moved to OnRegister() from InitializeComponent().

  • Avoid updating the PhysicsVolume in MovementComponent::SetUpdatedComponent() if executing during registration, it will occur as part of UpdateOverlaps() in registration anyway.

  • CharacterMovementComponent::SetUpdatedComponent() makes sure the OnComponentBeginOverlap delegate is added uniquely.

  • Fixed AHUD::GetCoordinateOffset() returning uninitialized FVector2D when there is no local player.

  • CharacterMovement StepUp() function aborts if forward movement results in no net change in position.

    • Step downs are also limited to step up height when not walking.

    • Fixes flying Characters moving down when impacting vertical surfaces, even if movement direction was slightly upward.

    • Also reduces the worst-case number of sweeps in character movement (previously occurred when pushing into corners).

  • Removed redundant GetWorld() call in SceneComponent::GetPhysicsVolume()

  • Fixed MovementComponent::ComputeSlideVector() calculating incorrect deflection vector when the plane constraint is enabled.

    • Rather than projecting the final result onto the movement plane, the normal should first be projected onto the plane and normalized.

    • This fixes cases where collision with geometry angled outside the movement plane would stop movement, rather than deflect it.

  • Don't recalculate Character velocity when falling if there was a teleport (usually adjustment out of penetration).

  • Improve Pawn physics penetration handling when overlapping more than one object/surface.

  • Use a combined MTD result to get an adjustment that moves out of both objects.

  • MovementComponent::TwoWallAdjust() uses ComputeSlideVector() rather than an explicit vector projection.

    • Extra call to HandleSlopeBoosting() removed in CharacterMovementComponent::PhysFalling() since it's handled by TwoWallAdjust()'s call to ComputeSlideVector() now.

  • Tweak to air control limit code, to allow pushing in to vertical surfaces so you still get the hit event. Angle surfaces that normally restrict air control still get the event due to contacts caused by gravity.

  • Fix SceneComponent::MoveComponent() so it always fills in the out HitResult no matter the control path.

  • FHitResult default constructor initializes 'Time' variable to 1.0.

  • Added 'bBlockingHit' boolean to BreakHitResult.

  • New: Add hit result to all Actor and SceneComponent transform functions, for both C++ and Blueprints.

    • Blueprints now have a way to get the hit result of swept movement to be able to implement more complex movement without the need for C++ code.

  • CharacterMovement Falling doesn't need to check air control before the first move, since deflection uses the non-air control velocity to deflect.

  • Fixed crash in CharacterMovementComponent if setting UpdatedComponent to NULL.

  • MovementComponent::SetUpdatedComponent avoids changing physics volume and trying to unbind delegate (causing ensure) if object is pending kill.

  • Fix UpdateOverlaps() call in DetachFromParent() causing incorrect notification when called from AttachTo() and the object does not maintain world position.

  • Allow Actor.InitialLifeSpan to be edited on instances (EditAnywhere instead of EditDefaultsOnly).

  • Projectiles now behave correctly when the plane constraint is enabled.

    • Added UMovementComponent::ConstrainNormalToPlane(), which normalizes the vector after constraining its direction.

  • Fixed some BT nodes not being exposed as AIMODULE_API

  • Minor change to some of AI functions' signature, pointers changed to references where a null value is invalid

  • Removed hard reference to AAIController from APawn

  • A fix to wrong condition being checked to determine if navigation needs to be build

  • New: Exposed UE4's Recast integration header files (moved to public directories)

  • Renamed GetBlackboard functions available in BT nodes to GetOwnersBlackboard.

  • Fixed debug labels drawn by NavigationTestingActor being drawn for items outside of camera's frustum

  • Fixed navmesh's raycast not properly handling queries starting outside of navmesh. Made those result as "blocked".

  • Marked SpawnAIFromClass BP node as unsafe for usage in Construction Script (because it is!)

  • Collision Profile: Fixed so that it doesn't accept Trace Type as an Object Type for profile.

  • Fixed issue when ChildActorComponent produces "Mobility spam log" when it is inherited.

  • Special navigation area for too low spaces is now removed after applying static modifiers

  • Fixed navmesh update on geometry brush (BSP) changes

  • Fixed FPS drop on rebuilding navmesh

  • Added original key code to keyboard events and exposed AreCapsLocked from input events.

  • Major internal change to the way navmesh tiles generation is organized. No changes should be visible from user point of view.

  • AReverbVolume has been renamed to AAudioVolume.

  • FComponentInstanceDataBase no longer stored using TSharedPtr

  • FInputChord::RelationshipType renamed FInputChord::ERelationshipType

  • UDEPRECATED_SaveGameSummary deleted

  • Push To Talk removed from default Debug Exec Bindings

  • Unused UWorld::bDebugStepExecution removed.

  • Changed templates that have projectiles to use a DefaultProjectile collision preset which now exists in engine.

  • Improved documentation in GameViewportClient header.

  • FSoundParseParameters moved out of AudioComponent.h and in to ActiveSound.h

  • FKeyDetails now uses TAttribute instead of both a FName member and a Delegate member that returns a FName.

  • Slate event-routing is now more systematic, enabling better event tracking and debugging features in the future.

  • Slate event routing implementation is now more systematic, enabling better event logging and debugging in the future.

  • Spawning an Actor into a world that is being torn down is now prevented and a warning issued.

  • Media: Fixed a memory leak in the Windows media player plug-in

  • Media: Fixed incorrect handling of relative movie file paths

  • Fixed case where FlushLevelStreaming was not flushing state of all levels

  • Added documentation to Hud.h file and split some structs and such into their own files.

  • UPROPERTY removed from internal state boolean in UActorComponent

  • Validate that no components that are not owned by an Actor are added to its OwnedComponents array.

  • AController::IsInState() is now const.

  • Consolidate all CharacterMovementComponent::PhysFalling acceleration handling into GetFallingLateralAcceleration().

  • ProjectileMovementComponent.MaxSimulationIterations is no longer an advanced display property, in line with the other related settings (MaxSimulationTimeStep, bForceSubStepping).

  • Deprecated CharacterMovementComponent::AdjustUpperHemisphereImpact() and UpperImpactNormalScale.

  • Cleaned up CharacterMovementComponent to use new deprecation enable/disable macros instead of all the compiler-specific pragmas in-line.

Networking

  • New: Sockets: Added API for specifying send and receive buffer sizes on UDP/TCP socket builders

  • New: Allow game code to detect when a network demo has started playing.

  • New: Add ability to slow and speedup network demo playback speed.

  • New: Added ability to control the demo record rate.

  • New: Adding Native NetSerialize support to FastArrayReplication path.

  • Made MulticastSocket creation optional (for platforms that don't support multicast)

  • Prevent crash when resetting achievements on those platforms that require a valid FUniqueNetId to do so.

  • Fixed crash when exiting multi-client Play-In-Editor after failing to connect to a server.

  • Fixed an issue when async networking loading was turned off, and a package was not fully loaded, would cause issues.

  • Fixed constructors in FVector_NetQuantize10, FVector_NetQuantize100 and FVector_NetQuantizeNormal.

  • Fixed a crash that could occur if a garbage collected objects and replication.

  • Fixed an issue that could cause some properties not to get replicated when an actor goes dormant.

  • Fixed the behavior of ESocketReceiveFlags::WaitAll on Windows.

Online

  • Avoid out of bounds crash due to functions not checking against the correct max value for local talkers

    • Integrated from PR #495 by alexSilkin

  • Fixed bugs in OnlineSubsystemNull

    • LAN sessions created by OnlineSubsystemNull will now advertise the actual port used by the net driver.

    • This makes testing multiplayer with multiple instances on the same computer easier since each instance will advertise a different port when hosting a session.

  • Fixed a bug where LAN sessions created by OnlineSubsystemNull would not advertise as soon as they are created.

Physics

  • New: Exposed the "GetCenterOfMass” function to Blueprints

  • New: Added center of mass visualization

  • New: Destructible components now use the async scene automatically (if the scene is enabled)

  • New: Added the option to turn sub-stepping off for async scene.

  • New: Added new physics stats and named events to help profile physx performance.

  • New: Added mass override to easily set mass without worrying about density values.

  • New: Destruction no longer needs to generate hit events to simulate impact damage.

  • New: Expose ragdoll simulation on dedicated server as project setting

  • Avoid heap allocation in single sweep and raycast queries when collision analyzer isn't enabled.

  • Fix collision on instance indices >128 on movable InstancedStaticMeshComponents

  • Improve depenetration vector when overlapping trimesh and heightfields.

    • Previously we tried using the supplied impact normal when face index was valid, but this meant we could be inside an edge and try to move along the normal, rather than away from the edge.

    • Now we just use MTD with an inflated test to get the depentration vector.

  • Improved Physics Blending Issue

    • This fixes issue when root bone isn't identity.

    • This fixes when physics asset root bone isn't mesh's root bone

    • Cleaned up code so that we don't use static variable but local variables

Platforms

  • New: Added ability to use r.MobileContentScaleFactor of 0, which means to use full native resolution on iOS and Android. This is the best way to get the native resolution (1920x1080) on the iPhone 6+, instead of the full virtual resolution (2208x1242) which would just get scaled down.

  • New: Fixed a crash with ICU trying to localize an error before loading ICU data (when using -filehostip in particular)

  • New: First round of merging fixes from Shootergame certification pass. Many fixes to OSS systems.

  • Changed FLightmassProcessor::BeginRun() to always use Development builds of UnrealLightmass on Mac and Linux, same as it does on Windows.

  • Fixed AVI extension in Windows AVIWriter

  • Cancel Http Request for Android, IOS and Linux now cleans up the request objects as expected.

  • Exclude staged build directories from filelist processing when using cookonthefly. Can speed up cookonthefly boot times.

  • Fixed CreateGuid to create correctly unique Guids on all platforms. Previously on platforms other than microsoft and apple platforms it could create identical Guids if called frequently.

Android
  • New: First pass at google play store IAP added. Further changes are incoming.

  • New: Improve Android device detection logic to detect unauthorized devices and query SDK and release versions, displaying the OS version in the device manager

  • New: Several Android toolchain updates:

    • Updated to support Android 5.0 (SDK 21 and NDK 21) - however we default to NDK 19 since compiling with NDK 21 headers generates code that will not run on devices before 5.0).

    • Implemented incremental APK generation to reduce the time spent in the final .apk file generation (when compiling or packaging).

    • Also added the ability to easily add more Java libraries without needing to update UnrealBuildTool code (just put your lib in \Build\Android\JavaLibs like we have google now in Engine\Build\Android\Java\JavaLibs)

    • Changed the APK generation code to hide the spammy output and show more useful stage progression.

  • Improve Android logging to break up log messages at newlines to deal with buffer limit.

  • Corrected JNI call (AndroidThunkCpp_IsMusicActive) to use CallBooleanMethod.

  • Removed a negative delta time fatal error (occurs on some Android devices).

  • Fixed an issue where you couldn't cancel Google Play sign-in in some cases

  • Fixed errors when building games for Android in "for distribution" mode

  • Fixed looping and playback issues with Android ADPCM samples

iOS
  • New: You can now specify the minimum iOS version supported by the game as well as the which devices are supported. These settings are located in the iOS section of the Project Settings.

  • New: The mobile provision and signing certificate can now be specified via the iOS Project Settings. Selecting the Install Provision or Install Certificate buttons will install the selected item.

  • New: Enabled C++11 support on iOS

  • New: Facebook SDK for iOS upgraded to 3.16

  • New: iOS and Mac Media Player added. This allows users to stream movies to slate textures in game.

  • New: Added support for iPhone6/6+ resolutions

  • New: Added Metal support for Tappy Chicken (reduced battery usage if nothing else!)

  • New: Added an on-screen message for when you run a Metal-only app on a device that doesn't support Metal (which the App Store should disallow, but it's still possible to get it on a non-Metal device)

  • New: Shipping and Test configurations for iOS now include the arm64 executable. This will be a requirement for putting apps on the app store in February, so we wanted to give users time to get used to the increased sizes.

  • New: IPhonePackager is now used on a Mac to detect provisions and signing-certificates. This starts the process of unifying the code path for both PC and Mac workflows.

  • New: Added an iOS framepacer which allows users to specify how often they sync rendering with the iOS frame ticker.

  • New: Receipts are now returned as part of the In-App Purchase payload for IOS.

  • New: Added Copy Repository functionality to iOS deploy stage of UFE.

  • New: The additional commandline args files in UFE can now be used to specify a commandline for launch on device when selecting Copy Repository as the deploy method.

  • Fixed an issue with xcode project generation when a sample had been renamed from the launcher. This was causing an invalid scheme to be generated and causing code signing issues.

  • Fix for crash when utilizing landscape mode on iOS devices.

  • Properly parse UTC times from the mobile provision files so we can accurately detect valid provisions.

  • Updated IPhonePackager to provide a better message when the bundle identifier of the mobile provision that is installed doesn't match the bundle identifier of the game it is being installed for.

  • Stat Macro renamed to avoid a mismatch with one from apples core animation api.

  • dSYM files can now be generated when deploying to iOS from Xcode.

HTML5
  • New: Added methods to allow stack walking in HTML5.

  • New: Update Emscripten SDK to 1.25

  • New: Enabled ICU (International Components for Unicode) for HTML5.

  • Fixes for Launch On for HTML5 and Chrome.

  • Fixed key repeat not working in HTML5.

  • Python exe used by HTML5 is now read from emscripten config file. When missing environment variable PYTHON is used, if empty then PATH is searched.

Linux
  • New: Implemented transparent windows

  • Core 3.2 GL profile is now sufficient for running Linux tools (previously compatibility features were used)

  • Fix for not being able to start modular dedicated server due to (bogus) version mismatch of its modules.

  • Fix for multiple instances of a dedicated server stomping on each other's logs

  • Fix linking to libraries located in paths with spaces.

  • Added some missing platform specific functionality for Linux.

  • Fix for connectivity issues on Debian due to its 127.0.1.1 address hack.

  • Added (unsupported) third-party libraries for Linux on ARM.

  • Added files needed to compile for Linux on ARM (unsupported)

  • UBT will refuse to use clang 3.4 and gcc.

Mac
  • New: Fully implement support for Mac OS X's fullscreen mode.

    • Fullscreen mode on OS X now allows you to specify the resolution rather than always taking the displays current resolution.

  • New: Added support for customizing splash screen and icons for Mac in project preferences

  • New: Added support for GameStop version of Xbox 360 controller on Mac

  • New: Native look of window close/miniaturize/zoom buttons on OS X 10.10 Yosemite

  • Disable OpenGL workarounds no longer required on Yosemite, though they will still be used on Mavericks.

    • Combined depth-stencil clears & depth-fetch-during-depth-test now work on AMD 7xx0 & Dxx0 GPUs.

    • On Intel cards we no longer need to flush changes to the blend state, significantly improving performance on those GPUs.

  • Fix broken skeletal mesh rendering on NVIDIA cards under Yosemite.

    • This rebinds the SRV whenever the underlying buffer is modified which should not have a performance impact.

  • Fix crash reporting under Yosemite due to a bad interaction between our operator-new override & a system library.

  • Amend launching processes on OS X to report failures rather than crashing.

  • Stop titled windows on Mac OS X wandering down the screen when repeatedly entering & exiting fullscreen mode.

  • Fix crash on taking high-res screenshots on OS X.

  • Invert keydown/keyup message handling order on Mac OS X so that Slate gets the chance to process the message before the OS.

  • Ensures that viewports always get key-down & key-up pairs & that we don't accidentally activate menu key-equivalents.

  • Fix the Window menu on Mac OS X not being properly populated.

  • Rewrite separate game thread event dispatching on Mac OS X to use a custom run-loop source and avoid several potential deadlock risks.

  • Fix OS X system modal dialog input by setting a flag in MacApplication to indicate that a system modal dialog is active.

  • Rather than cancelling OS quit requests on OS X and then quitting behind Cocoa's back, use the proper deferral mechanism so that we have Cocoa wait for the separate game thread to exit before it tears the application down.

  • UE4 applications shouldn't cancel shutdown, restart or logout requests anymore.

  • Stop windows from reappearing on OS X after they've been closed.

  • Properly escape the command-line arguments when launching games for Play-as-Client so that they open in the correct display mode.

  • On OS X when a UE4 application loses focus push modal windows down to the normal window level, restore them on gaining focus, so that they don't float over other applications.

  • Fix reporting of crashed application name on OS X when launching the editor without a project and ensure's causing hangs in crashed applications.

  • Fix some faulty FMacWindow event order assumptions to ensure correct behaviour when opening windows.

  • Copy the crash video if there is one into the crash report folder on OS X.

  • Fixed some issues with windows rearranging their order on editor deactivation.

  • Fixed handling of text dragged to editor widgets from other apps.

  • Fixed menu and tooltip animation issues caused by setting their initial position incorrectly.

  • Fixed a problem with Window menu contents not updating when enabling or disabling items in editor's experimental settings.

  • Fixed a problem with editor freezing when opening menus from menu bar.

  • Fixed a problem with source control login dialog showing behind other windows.

  • Matinee will now save movies with correct .mov extension instead of .avi

  • Fixed a crash in tutorial editor's widget picker.

  • Use Less CPU when in Background editor option will now reduce CPU usage after fast switching to different user.

  • Fixed some issues with sub-menus not populating correctly.

  • BINARY: Don't activate the Launcher on Mac when the editor starts if it's already running, but hidden.

  • Fixed a freeze on quitting the editor with Cmd+W on Mac.

  • Pressing W/E keys while using trackpad no longer changes active widget mode in editor's viewport.

  • Fixed a problem with openFile: spawning another process if called with invalid params.

  • Updated engine code to compile correctly with OS X 10.10 SDK, added SDK detection to MacToolChain.

  • Specify explicit window levels for the different types of window in the editor on OS X, so that modal/tooltip/menu windows are on top, then parented or utility windows, then normal windows at the bottom.

Playstation 4
  • New: Initial support for SN-DBS distributed build system. Will be used for compiling for PS4 if SN-DBS is installed and Incredibuild isn't available/enabled.

  • New: Added BC4 texture support.

  • New: Added PS4 compatible .natvis for Visual Studio debug visualizers. Copy Extras\VisualStudioDebugging\PS4UE4.natvis to SCE\orbis-debugger

  • New: Project Settings for PS4 (in the editor) now exposes various compile time options for each project. RazorCPU support, GPU Debugger support, etc.

  • Fix for FWeakObjectPtr visualizer not working due to .natvis not supporting multiple types in one visualizer

  • Fix for random on screen corruption when GBufferFormat is set to high precision.

  • Final round of fixes from the Shootergame certification pass. Fixes various issues with async tasks from OSS calls.

  • Fix bug causing corrupt dynamic cubemap reflection captures.

  • Fixes a UFE crash when powering off the PS4 running the launched build from UFE.

  • Fixes VSI detection and project generation on system which only have VS2013 installed.

  • Fix potential GPU hangs on PS4 when command buffer exceeds 4MB.

  • Fix incorrect array slice / mip based clears for non-cmask 2d textures.

Xbox One
  • New: Geometry shaders now use on-chip memory. This saves bandwidth and speeds up the GPU when geometry shaders are used.

  • Fixed a memory leak in the DirectX state cache.

  • Remove dependency on June 2010 DirectX install for Xbox One builds.

  • Removed non-breaking spaces from some code so that it can be compiled on Japanese Windows.

  • Removed use of SHAPE for the XAudio2 device used by the movie streamer, as it was interfering with third party audio.

  • Fixed a memory leak in the DirectX state cache.

  • Fixed a potential use-after-free when creating Live sessions.

  • Fixed a potential crash when attempting to join a Live session after the host has disconnected.

  • Fixed some potential crashes in the Live online subsystem due to uncaught exceptions.

Rendering

  • New: Scene captures that update every frame now benefit from occlusion queries

  • New: Added “Self Shadow Only” setting to components (e.g. for 1st person self shadowing weapon without casting a shadow onto the world)

  • New: You can now configure Ambient Occlusion’s static amount in your project settings for better performance when not using baked lighting

  • New: Improved visual quality of Subsurface Scattering (less artifacts on half res upsample, more crisp non subsurface)

  • New: Added 'r.ProfileGPU.Root', which can be used to filter the hierarchy to a specified root

  • New: RHI.MaximumFrameLatency for setting the number of frames that can be queued for render on DX11

  • New: “Visualize HDR” view mode now shows Histogram bucket as color

  • New: New project setting that exposes D-Buffer requirements for your game

  • New: Added support for setting show flags for Scene Capture actors. Now it is possible to disable things like dynamic shadowing or translucency for Scene Captures, and this can be adjusted individually for different Scene Capture actors.

  • New: Added a new CVar in the scalability ini r.EmitterSpawnRateScale. This is applied as a global scale on the spawn rate of all emitters that have bApplyGlobalSpawnRateScale set to true in their spawn module. bApplyGlobalSpawnRateScale defaults to true.

  • New: Distance Field AO optimizations

    • Objects with no distance field representation (character) no longer receive DFAO, that was causing a huge amount of interpolation cost

    • Background is stenciled out from interpolation splat pass

    • Surface cache resources are allocated based on worst case of the current resolution, saves memory and prevents overflow

  • New: Skylight captures are now also updated when reflection captures are updated.

  • New: GPU emitters now support event spawning.

  • New: Added an updatable texture to easily allow writing to textures every frame.

  • New: Forward LifeTime parameter to LineBatcher when drawing Cylinders

  • New: SlopeMask: material function used to mask the slope of a mesh, useful for terrain texturing and adding snow to the top of objects.

  • New: MatLayerBlend_OverrideOpacity: Material layer function to override opacity

  • New: MatLayerBlend_ModulateSpecular: Material layer function to modulate specularity attribute.

  • New: VectorDisplacement: Added material function for using vector displacements rendered in xNormal

  • New: SplineThicken: added new input for overriding the UVs used to generate the round normal. This is useful for having multiple cylinders on one sheet when doing hair.

  • New: Added support for ddx/ddy functions on Metal shaders

  • New: Fixed issue where changes to UPrimitiveComponent::bRenderInMainPass had no effect. Replaced property with SetRenderInMainPass function.

  • New: Added cvar override 'r.SceneCaptureResizeMethod' to prevent scene capture render targets from being clamped in game mode.

  • New: SetOcclusionTint and SetMinOcclusion BP functions for skylight components

    • SetCastShadows is now accessible to skylight components

  • New: De-emphasized connectors in the material editor are drawn much brighter, increases visibility with comment backgrounds

  • New: MatLayerBlend_TenLayerBlend: This is a node that should make working with material layers more straight forward. This is a fixed function node that supports blending of a maximum of 10 layers. If you do not use a layer input or mask the compiler will optimize it out.

  • New: Added OcclusionTint, MinOcclusion to sky light for DFAO artistic controls

  • New: Renamed new cvars, now 'r.Shaders.Optimize' and 'r.Shaders.KeepDebugInfo'

  • New: added filtered option to the SceneTextures for PostprocessInput0..6, doesn't work on OpenGL yet

  • New: exposing new PostProcessMaterial location to replace the tonemapper, this is the base for upcoming postprocess changes

  • New: D-buffer approach for decals exposed as a project setting.

  • Allowed setting null textures in OpenGLRHI to match D3D & fixed a number of crash bugs.

  • Avoid accessing a destructed RHI in OpenGLTexture & SlateRHIResourceManager to prevent crashes on shutdown.

  • Fix for GSystemResolution not being setup in time for some objects being created resulting in UTextureRenderTarget2D's having a size of 0,0.

  • Flowmap material function: added support for disabling mip map adjustment, this allows the function to be used in world position offset or displacement.

  • Fixed corruption on particles.

  • Fixed objects not rendered in the main pass still affecting motion blur.

  • Fixed scene captures on mobile projects.

  • Black lightmaps are now tossed even when a skylight is absent.

  • Fixed translucent subsurface lighting.

  • Fixed editor primitive depth testing with GetDynamicMeshElements.

  • Disabled DFAO interpolation depth testing due to artifacts Fixed skylight crash when building lighting with no specified cubemap.

  • Fixed rare GPU hang from DFAO.

  • Fixed Screenspace Subsurface Scattering when used in splitscreen.

  • Improved subsurface profile quality (fewer artifacts due to the half resolution upsample)

  • Fixed the case where a single float was provided as the subsurface color in a material

  • Lightmass material properties are clamped to valid ranges before exporting, prevents light explosions with photon mapping

  • Material inputs are clamped to valid ranges at the source. Adds a few ALUs but improves cross-platform compatibility and consistency.

  • Fixed DiffuseColor input still being used when exporting translucent materials to lightmass

  • Optimized the histogram shader, especially for AMD GPUs and high resolutions

  • Fog inscattering exponent is no longer clamped to 1

  • Shadow passes are now implemented properly with GetDynamicMeshElements

    • Previously was reusing meshes from the main view, but meshes in the shadow view might not be visible from the main view

  • Fixed a bug that made normal mapped mesh particles not work properly with scaling the meshes.

  • Minor parallel rendering fixes. Improved constructors for Xbox RHI. delete comments and cruft. Turn off parallel shadows. Flush before reflection capture on all platforms.

  • Fixed stencil clear bug for shadows and parallel rendering

  • Fixed togglerhithread

  • Fixed shader recompilation

  • Minor parallel rendering fixes; make sure bypass is latched right away for RHI thread and don't clear stencil on PS4 if we don't have a write address

  • Fixed a bug that made mesh emitters continue to render in wireframe after switching to wireframe and back.

  • Parallel rendering - fixed two serious race conditions on the PS4 and XB1 that resulted in GPU hangs etc

  • OpacityMask and Masked materials now work correctly when using material attributes.

  • Added UFunction redirects for SetIntensity in Light and SkyLight components. This function was previously named SetBrightness.

  • Fixed windowed fullscreen modes so that you can specify resolutions less than the native desktop without causing the window to appear incorrectly in the corner of the screen

  • Fixes for several crashes when using the null RHI

  • Fixed a gamma correction issue in mobile preview modes where slate items would be rendered incorrectly

  • Changed FPrimitiveSceneProxy::GetScene() to return a reference rather than a pointer

  • Fixed bug where velocity map rendering was not working correctly with RHI Thread. This was causing motion blur to be exagerated.

  • Fixed improper use of BUF_VOLATILE in the skincache. The lifetime of a BUF_VOLATILE is a single frame.

  • Fixed UTextureDynamic2D to have a useful static creation function.

  • Significant particle optimization from Pull Request #284

  • Fixed a few problems with PSA_Velocity and PSA_AwayFromCenter in conjunction with use of the initial rotation module.

  • Added geometry and current time to ISlateViewport Tick function

  • Hid irrelevant collision-related properties from Billboard and MaterialBillboard components

  • XboxOne In-progress work on deferred contexts

  • Remove xbox from PC version of split d3d11rhi

  • Parallel rendering - turned on RHI thread by default for platforms that support it

  • Split Xbox RHI off. Deffered contexts for XB1, parallel velocity rendering fixed and reenabled.RHIThread on by default on platforms that support it.

  • Updated world aligned material functions to use shared texture samplers.

  • GitHub pull request #68, simple interface for third party occlusion solutions

  • Removed DEC_* macros from drawing events

  • Fixed crash when launching certain projects either in editor or game.

  • Removed r.UseDiffuseSpecularMaterialInput (not usually used, and prevented some GBuffer optimizations)

  • Fixed objects not rendering in the main pass still affect motion blur

  • Fixed the 1 pixel black border which can show up in screenshots when certain post process effects are enabled

  • Improved streaming strategy for textures using their component’s mobility settings

  • Persistent level is always registered for texture streaming in the Editor. Landscape correctly registers all dependent textures for streaming.

  • Fixed TexelFactor calculation for landscape heightmap texture. Improves heightmap texture streaming

  • Metal now supports Shader Resource View parameters

  • Metal now running as feature level ES 3.1

  • Moved around some cross-compile source files

  • Replaced hlslcc*.exe with CrossCompilerTool.exe

  • OpenGL backend for the shader cross-compiler now resides on ShaderFormatOpenGL

  • Metal backend for the shader cross-compiler now resides on MetalShaderFormat

  • Metal shader back-end does not use the GLSL back-end anymore; added FramebufferFetchMRT() intrinsic.

  • GRHIFeatureLevel is deprecated.

Upgrade Notes

C++ API Changes

  • UMaterialExpressionTextureSample and UMaterialExpressionTextureSampleParameter's ConstMipValue value, and UMaterialExpressionIf's ConstAEqualsB value were previously used verbatim. Now they are processed by the compiler, so check these values first if you notice any oddities in a material.

  • After switching to using the new “GENERATED_BODY” macro there can be redefinition compiler errors. To fix that you have to either:

    • Declare the FObjectInitializer constructor in header file, or

    • Delete definition of FObjectInitializer constructor from source file (if it does nothing more than default constructor).

    • You may need also to change protection level as GENERATED_BODY() macro will preserve spotted protection level, while old macro was always setting to public.

  • You may have to rename the class in your code to avoid deprecation warnings.

  • All SCOPED*DRAW_EVENT* functions now omit the event color

  • Changes to the API of GetBoneLocation and GetBoneQuaternion

  • All Montage API now takes an optional Montage pointer to control different Montage assets at the same time.

  • ULevelBase has been eliminated, however, all things should have been inheriting/referencing ULevel anyways.

  • Existing usages of AReverbVolume in C++ will need to be changed to AAudioVolume

  • Changed GetBoneLocation, GetBoneQuaternion to use bone space enum instead of ints

  • AnimMontage's bEnableRootMotionTranslation and bEnableRootMotionRotation have been combined and moved to bEnableRootMotion on AnimSequence's. The values still exist on AnimMontages but should not be used.

    • UAnimMontage::Advance now takes a flag to specify whether root motion should be blended or not

    • UAnimSequence::ResetRootBoneForRootMotion now takes the value for ERootMotionRootLock::Type RootMotionRootLock directly instead of the owning FAnimExtractContext

  • Any API which refers to a delegate will now have a different decorated linker symbol.

    • Any code which referred to internal delegate implementation types, e.g. TBaseDelegate_NoParams, will no longer compile and should be replaced with the equivalent DECLARE_* macro.

  • RemoveFromViewport is now deprecated, use RemoveFromParent.

  • InterfaceCast has been deprecated - Cast or dynamic_cast should be used instead.

  • CopyConstructItems and RelocateItems have been deprecated.

    • Their use should be replaced with ConstructItems and RelocateConstructItems, which support construction/relocation between different types.

  • FAnimNotifyEvent StartTime deprecated - Replaced with methods GetTime() and SetTime()

    • FBranchingPoint DisplayTime deprecated - Replaced with methods GetTime() and SetTime()

    • FCompositeSection DisplayTime deprecated - Replaced with methods GetTime() and SetTime()

  • API changes (must be changed):

    • FViewport::CaptureJoystickInput(bool Capture) renamed to FViewport::SetUserFocus(bool bFocus)

      • EKeyboardFocusCause renamed to EFocusCause

      • FKeyboardFocusEvent renamed to FFocusEvent

      • FKeyboardEvent renamed to FKeyEvent

      • SWidget::OnKeyboardFocusReceived(...) use SWidget::OnFocusReceived(...)

      • SWidget::OnKeyboardFocusLost(...) use SWidget::OnFocusLost(...)

      • SWidget::OnKeyboardFocusChanging(...) use SWidget::OnFocusChanging(...)

      • SWidget::OnControllerButtonPressed(...) now routed through SWidget::OnKeyDown(...)

  • UGameInstance::InitPIE has been removed and UGameInstance::Init will be called for PIE as well as for standalone.

  • This upgrade also includes minor changes to the IHeadMountedDisplayInterface. If you've used this interface, please upgrade your implementation to conform to the new function signatures.

  • Removed GVolumeMultiplier and added an equivalent to FApp to contain the code to load the unfocused volume multiplier from config.

  • FPrimitiveSceneProxy::GetScene() now returns a reference to the FScene. Lots of code assumes the existance of a scene, so this cements this. Added a check() that the scene is valid when creating the proxy.

  • Instead of including Media.h, please include the interface header files that you actually use, i.e. IMediaPlayer.h and/or IMediaTrack.h

  • ApplyRequestedMove() has had params reordered and changed; it now includes Friction and Braking, and has all the "out" params at the end.

  • Some variables and functions have either been removed or renamed:

    • Removed hacky bGravityEnabled flag from various velocity and acceleration functions.

    • Deprecated old CalculateVelocity() method, renamed to ComputeVelocity() to align with the other functions in the class.

  • Deprecated CharacterMovementComponent::AdjustUpperHemisphereImpact() and UpperImpactNormalScale.

    • Implementations of AdjustUpperHemisphereImpact() should override ComputeSlideVector() instead.

  • Renamed THRESH_VECTORS_ARE_PARALLEL to THRESH_NORMALS_ARE_PARALLEL, and change the meaning to the cosine of the angle we compare to.

    • Old tolerance was very fuzzy (11.4 degrees), new tolerance is about 1 degree.

  • Modified FindAirControlImpact() to distinguish between current and lookahead time, and to take velocity and gravity. However, this function might be deprecated as it is not currently used.

  • Removed hacky bGravityEnabled flag from various velocity and acceleration functions.

    • Deprecated old CalculateVelocity() method, renamed to ComputeVelocity() to align with the other functions in the class.

  • Some CharacterMovementComponent functions related to air control have been changed to allow more flexibility:

    • GetAirControl() now returns a FVector rather than float, to allow air control code to act non-uniformly (ie different laterally versus forward) if desired.

    • GetFallingLateralAcceleration()/GetAirControl() no longer do the sweep test forward in time to determine if air control should be limited.

    • LimitAirControl() now returns a FVector rather than float. The behavior is now to allow acceleration parallel to the surface in the horizontal plane, or away from the surface altogether.

    • LimitAirControl() may be called multiple times during a falling movement update.

  • Users may need to update their AI API function calls.

  • Unused parameters removed from FConfigFile::CombineFromBuffer and ProcessInputFileContents

  • FConfigFile::ProcessInputFileContents marked CORE_API so as to be callable from other modules

  • FAES marked CORE_API so as to be usable from other modules

  • All UK2Node GetMenuEntries() functions are deprecated/unused, and have been replaced by GetMenuActions().

  • Required Emscripten SDK version is now 1.25. version 1.22 will no longer work.

  • Depending on the console variable use you might see a behavior change (watch out for errors in the log). Console variable Set() now needs to specify the priority.

  • This shouldn't have been use by any project other than Fortnite.

  • Instead of ISettingsEditorModule::GetRef() use FModuleManager::GetModuleChecked("SettingsModule"). Instead of including SettingsEditor.h include the interface headers you actually use.

  • Instead of ISettingsModule::Get() use FModuleManager::GetModulePtr("Settings"). Instead of using FSettingsSectionDelegates assign delegates directly through the new ISettingsSection methods.

  • SWidget::RenderTransform is now a TOptional.

  • FWorkspaceMenuStructure::AssetEditorCategory has been removed and FWorkflowTabFactory::TabIcon is now an FSlateIcon (was previously an FSlateBrush) To fix the category, use FAssetEditorToolkit::LocalWorkspaceCategory and set it using FTabManager::AddLocalWorkspaceMenuItem() To fix the tab icon, simply use the same icon and style to create an FSlateIcon instead of an FSlateBrush Any editor in the engine can be looked to for reference on these changes.

Blueprints

  • Existing "Equal" nodes for vector/rotator types will be assigned an error tolerance value of "0.0" on load in order to preserve previous behavior that may have been dependent on exact equality.

    • New placements of "Equal" nodes for vector/rotator types will default to the new error tolerance value, and will thus have a "NearlyEquals" type of behavior by default.

  • Users that implement their own UK2Nodes will have to port from GetMenuEntries(), and implement GetMenuActions()/GetMenuCategory()/GetNodeTitle(ENodeTitleType::MenuTitle)/GetTooltipText()/GetSignature() to see their nodes properly presented in the new Blueprint menus.

Core

  • Any non-engine libraries which take or return delegates should be recompiled against the latest engine code to ensure they import/export the correct symbols.

  • Variadic delegates will allow binding to arbitrary numbers of arguments or functions with arbitrary arity, but the non-variadic version of delegates - still used by VS2012 - has the same limits as before if you still target that compiler.

    • Bound function arity limit == 8, bound argument limit == 4.

  • Manual construction of FPropertyChangedEvent instances should use the one-argument or two-argument form (construction of this type is unlikely to occur in game code though).

  • For projects targeting languages other than English, update the Internationalization Preset settings in Project Packaging Settings in order to maintain support for you desired cultures.

Framework

  • May need to include ActiveSound.h instead of AudioComponent.h if reference FSoundParseParameters

  • Added OnFinishedPointerInput(), which gets called after event processing and before GEngine->Tick(). SViewport and FSceneViewport now uses this function instead of ProcessInput() to accumulate high-precision mouse events.

  • Any C++ usages of EKeys::Underscore and EKeys::Quote will no longer work as expected and should be switched to EKeys::Hyphen and EKeys::Apostrophe respectively.

  • Functions Applying and Getting ComponentInstanceData now take/return FComponentInstanceDataBase* instead of a TSharedPtr

  • Any dynamically created components that were explicitly calling InitializeComponent should no longer do so as it is handled via RegisterComponent and will now assert due to InitializeComponent being called multiple times.

  • Use FVector::Coincident() if you care about the direction, for cases where FVector::Paralllel() was previously being used.

  • Function name will be updated automagically, but resaving BT assets is recommended.

Landscape

  • Landscape code has been moved out of the Engine module and into its own module.

Oculus Rift

  • The engine has been upgraded to use the 0.4.3 SDK from Oculus. Please upgrade your runtime installation by downloading the 0.4.3 runtimes from http://developer.oculus.com

Physics

  • This greatly improves performance. If you have destructible components that interact with the player and you are using an async scene you will need to manually set them to be in the sync scene

  • This is now off by default as destruction rarely needs this and it greatly improves performance.

Rendering

  • A reminder that DrawDynamicElements in subclasses of FPrimitiveSceneProxy will be deprecated in 4.7 and replaced with GetDynamicMeshElements.

  • hlslcc*.exe is now replaced by CrossCompilerTool.exe in the Engine binaries folder

  • Any code that is directly setting bRenderInMainPass must instead call SetRenderInMainPass( value ).

  • Any usage of GRHIFeatureLevel must be replaced with access to world or view's FeatureLevel property.

  • r.UseDiffuseSpecularMaterialInput has been removed allowing us to better optimize the g-buffer layout

  • The CustomTexture node has been removed completely and any materials that were using CustomTexture with some of the workarounds that worked in some previous versions will need to be modified.

    • A Custom node will now accept a connection from a TextureObject or TextureObjectParameter node instead.

    • If you add a parameter to your Custom node named "MyTex" and connect a TextureObject node, an extra sampler parameter named "MyTexSampler" will be available inside the Custom node's HLSL.

    • You can sample the texture with an HLSL expression such as "Texture2DSample(MyTex,MyTexSampler,UV);"

Other

  • You may experience failure for some old bindings depending on how they were setup. Ensure your bindings are Pure, and the return types match.

Known Issues

  • Cannot create events in the AnimBP EventGraph for new Anim Notifies.

    • Workaround for this issue is to reopen the editor.

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼