UDN
Search public documentation:
LevelStreamingHowToKR
English Translation
日本語訳
中国翻译
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
日本語訳
中国翻译
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
레벨 스트리밍 사용하기
문서 변경내역: Dave Nash 작성. Daniel Vogel 수정. 홍성진 번역.
개요
퍼시스턴트(지속) 레벨
- 새 맵을 생성하고 보이지 않는 어딘가에 작은 큐브 지오메트리를 추가합니다. (이렇게 하면 엔진이 이 레벨을 하나의 레벨로 인정을 하며, 결국 이를 없애는 단계가 있을 것입니다.)
- 플레이어 시작 지점에 Player Start 를 놓습니다. 퍼시스턴트 레벨에서는 이 Player Start 가 공중에 뜰 가능성이 있지만 레벨에 스트림 인 후에는 첫 번째 스트리밍 레벨에서 플레이어를 시작하고자 하는 어느 위치로나 이동할 수 있습니다. 게임을 플레이할 때가 아니라 플레이어가 퍼시스턴트 레벨이 아닌 스트리밍 레벨 중 하나의 지오메트리을 실제로 통과할 때 퍼시스턴트 레벨을 시작합니다.
- 맵을 저장합니다. 자체적인 관리 방식에 맞도록 퍼시스턴트 레벨 이름을 지정합니다. 예를 들어 Headquarters_P 같은 식입니다.
- 콘텐츠 브라우저를 열고 "레벨" 탭을 클릭합니다. 여기서 스트림 인 시키려는 모든 레벨을 나열해야 합니다. Headquarters 가 맵 셋으로 구성되었다면, 여기서 3가지를 모두 추가합니다. 메뉴에서 레벨 -> 기존 레벨 추가... 를 선택하여 추가합니다. 스트리밍 레벨을 추가하는 순서는 중요하지 않으나 앞으로는 정돈 상태 유지를 위한 레벨 재정렬이 가능하도록 할 예정입니다. 작업 결과는 아래 그림과 같을 것입니다.
- 레벨 스트리밍 작동방식을 거리와 키즈멧 중에서 선택할 수 있는 옵션이 주어집니다.
- 거리 스트리밍은 레벨 원점에서 플레이어까지의 거리에 따라 레벨을 로드 / 언로드합니다.
- 키즈멧 스트리밍은 디자이너가 키즈멧 스크립팅을 통해 마음대로 레벨을 로드 / 언로드할 수 있어 가장 일반적입니다.
예 1: 스트리밍 레벨 셋을 추가시킨 이후의 레벨 브라우저
"CURRENT(현재)"로 명명된 이 레벨은 에디터 창이나 Kismet에서 변경된 내용이 있으면 수정됩니다. 이렇게 하면 레벨 쓰기가 가능한 한 여러 맵에서 간편하게 작업할 수 있습니다. Save 버튼을 누르면 CURRENT 레벨을 저장합니다(또는 Save All Levels 버튼을 눌러 퍼시스턴트 레벨을 포함한 여기 나열된 모든 맵을 저장할 수 있습니다).
Visible 확인란은 에디터에서 레벨을 숨기거나 표시하게 할 수 있습니다. 이 확인란은 오직 표시 지정용으로, 레벨 실행 시 게임에 스트리밍되는지 여부와는 전혀 관계가 없습니다. 그러나 여기서 보이지 않는 레벨은 레벨을 다시 빌드할 경우 영향을 받지 않으므로 레벨이 복잡한 경우에는 시간을 크게 절약할 수 있습니다.
퍼시스턴트 레벨에서 스트리밍된 레벨을 완전히 제거하려면 브라우저의 Level에서 Remove level from world를 선택합니다. 레벨의 스트리밍 방법을 변경하려면 레벨을 제거한 다음 다시 추가하여 스트리밍 인을 수행할 방법을 선택합니다. 현재 "Load"와 "Unload", Lock/Unlock 아이콘, Draw Bounding Box 플래그는 작동하지 않습니다.
예 2: 마우스 오른쪽 버튼을 클릭하고 "Make Current"를 선택하여 작업 중인 레벨을 변경합니다.
퍼시스턴트 레벨 작업 방법 요약
- 언리얼 에디터에서 새 맵을 작성합니다.
- 큐브처럼 간단한 BSP 지오메트리를 추가합니다.
- Player Start 를 추가합니다.
- 레벨 브라우저에서 스트리밍하려는 레벨을 추가합니다.
- 맵을 저장하고 이름을 지정합니다.
키즈멧을 통해 스크립트 스트리밍
- 키즈멧을 엽니다.
- 레벨 시작을 배치합니다(New Event -> Level Loaded).
- 레벨과 같은 수의 Steam Level 액션을 놓습니다. (New Action -> Level -> Stream Level).
- Stream Level 에 클릭하고 LevelName 부분에 레벨 이름을 넣어 각 레벨 이름을 추가합니다.
- Level Loaded 를 Steam Level 액션의 각 Load 입력에 연결합니다.
예 3: 키즈멧을 통해 세 레벨 로드
이 시점에서 퍼시스턴트 레벨을 실행시켜 스트리밍 레벨을 돌아다닐 수 있을 것입니다. 로드와 동시에 보이도록 설정만 해 뒀다면요. 퍼포먼드상의 이유로 그렇게 설정하지 않은 레벨이 있는 경우, 트리거나 다른 어떤 방법을 통해 보이게 만들 수단을 강구해야 합니다. 예를 들어 Headquarters_3 는 처음부터 플레이어한테 보이게 만들이게는 너무 멀리 있을 수 있으니, 리소스 절약을 위해 나중에 보이게 만들면 좋습니다. New Action -> Level 아래 Change Level Visibility 라는 키즈멧 액션도 있습니다. 이 액션을 통해 원하는 대로 스트리밍 레벨을 숨기고 드러낼 수 있습니다. Stream Level 액션에서 Unload 이벤트를 사용하면 레벨이 메모리에서 언로드되어 메모리 확보에 좋습니다만, 다시 보이게 만들려면 Load 이벤트를 사용해 줘야 한다는 점은 유념해 주십시오.
스크립트 스트리밍 작업 방법 요약
- 키즈멧을 엽니다.
- Level Loaded 액션과 StreamLevel 액션을 추가하고 Level Loaded 를 Load 입력에 연결합니다.
- Stream Level 을 클릭하고 "LevelName" 필드에 스트리밍하려는 레벨의 이름을 넣은 다음 bMakeVisibleAfterLoad 를 체크합니다.
- 맵을 저장하고 게임을 실행합니다.
거리 기반 스트리밍
예 4: 거리 기반 스트리밍 설정
거리 스크립팅 작업 방법 요약
- 콘텐츠 브라우저를 엽니다.
- 레벨 탭을 클릭합니다.
- 콘텐트 브라우저의 파일 메뉴에서 Level -> New From File 을 선택하고 스트림 인 시킬 레벨을 선택합니다.
- "Distance" 스트리밍을 선택합니다.
- "Persistent Level"을 선택했는지 확인하고 오른쪽의 WorldInfo 등록 정보를 펼칩니다. WorldInfo_#을 마우스 오른쪽 버튼으로 클릭하고 "Edit Properties"를 선택합니다.
- 표시되는 프로퍼티 창에서 WorldInfo 를 펼친 다음 StreamingLevels 를 펼칩니다.
- 플레이어와의 거리가 얼마나 되어야 레벨을 월드에 스트림 인 시킬 것인지 그 거리를 입력하고, 거리 측정을 위한 원점 위치를 월드 스페이스상의 위치로 변경합니다.
스트리밍 레벨 작업
로드와 이벤트
일반적으로 레벨 로드시 여러가지 이벤트가 돌아가는 Level Startup 액션을 대체하기 위해 새로운 키즈멧 액션이 추가되었습니다. 그 이름은 Level Loaded And Visible 입니다. 기본적으로 Level Startup 과 같은 방식으로 작동하나, Change Level Visibility 액션과 함께 작동되도록 고안되었습니다. CLV 액션을 통해서든 bMakeVisibleAfterLoad 플랙 체크 상태로 스트림 인 시켜서든, 레벨이 플레이어에게 보이게 되면 이 Loaded And Visible 액션이 발동됩니다. 여기에 Remote Events 와 결합시켜, 필요에 따라 로드 / 언로드는 물론이고 다른 스트리밍 레벨과 이벤트를 주고받을 수 있도록 하기 위해, 각 스트리밍 레벨을 독립적인 개체로 만듭니다. 아래 그림은 주 레벨이 보이게 되자 마자 플레이어를 텔레포트시키고, 다른 레벨의 Remote Event 가 발동되었을 때 크리처를 스폰시키기도 하는 예입니다.
예 5: 스트리밍 레벨 스크립트 예
레벨 간 액터 이동
2007년 12월 QA 승인 빌드 이후, 한 레벨에서 액터를 복사(Ctrl + C)하고 현재 레벨을 변경하고 붙여넣기(Ctrl + V)하면 간단히 레벨 간 액터 이동이 가능합니다. 그러나 이는 액터 간 참조에 따라 생길수 있는 문제 해결을 위해 새로운(scratch) 월드로 serialize 시켜야 한다는 점에서, MoveSelectedActorsToCurrentLevel 과 비슷한 방법을 사용합니다. 이 함수성은 changelist #203995, #206418 에 도입되었습니다. 2007년 1월 QA 승인 빌드 이전에는 대규모 액터를 한 번에 이동할 때 메모리 부족 오류가 발생할 수 있었으나 에디터 트랜잭션 버퍼의 성능(및 메모리 사용량)을 개선하여 이를 해결했습니다(changelist #206829). 또한 2007년 1월 QA 승인 빌드에서는 레벨 브라우저 의 New Level from Selected Actors 버튼을 사용하여 액터를 새 레벨로 이동할 수 있습니다 (changelist #206324).최적화
대부분 개발자들은 퍼포먼스와 작업방식 두 가지 면 모두에 있어서 스트리밍 레벨은 다다익선이라는 것을 알게 될 것입니다. 그러나 현재 시스템의 제한 요소 한 가지 때문에 좌절을 겪게 되는데, 그것은 뭐냐면 어느 한 레벨에 놓은 액터를 다른 레벨에서 키즈멧으로 직접 참조할 수 없다는 것입니다. 원격 이벤트를 발동시키고 수신하여 스트리밍 레벨 사이의 이벤트를 트리거시킬 수는 있지만, 여기서 다른 레벨 사이의 액터를 직접 참조할 수는 없는 것입니다. 위의 그림에서 보면 Pathnode_0 과 Pathnode_1 은 이 스크립트의 같은 레벨, 이 경우 Headquarters_2 에 있어야 합니다. 그 노드 중 하나라도 HQ_1 이나 3 에 있었다면, 이 액션들은 기능을 상실하게 됩니다. 2007년 12월 QA 승인 빌드 이후로, 기존 레벨을 스트리밍 덩어리로 쉽게 잘라주는 기능이 추가되었습니다.- 월드의 액터를 한 다발 선택합니다.
- 레벨 브라우저의 레벨 에서 선택 액터로부터 새 레벨 을 선택합니다.
- 디스크에 새로운 스트리밍 레벨이 생성되어 월드에 추가되며, 그 후 선택된 액터가 그 새 레벨로 이동됩니다.
