UDN
Search public documentation:
LevelStreamingHowToJP
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
UE3 ホーム > レベルストリーミング > レベルのストリーミングの手順
レベルのストリーミングの手順
概要
Persistent レベル
- プレーヤにゲームを開始させたい場所をプレーヤスタート地点として配置します。持続レベルではこのプレーヤスタート地点が空間に浮いていることが多いのですが、一旦レベルをストリーム インすると、最初にストリームされたレベルの中なら、プレーヤにゲームを開始させたい地点はどこへでも移動することができます。ゲームを始める時には持続レベルを起動することになりますが、プレーヤは実は持続レベルではなく、ストリームされたレベルのうちのひとつにあるジオメトリを歩き進むことになります。
- マップには、管理しやすいように、例えば「Headquarters_P」などの、持続レベルと分かるような名前をつけて保存しておきます。
- Generic ブラウザを開き、[Level] タブをクリックします。ここで、ストリーム インしたいレベルを記載しておく必要があります。「Headquarters」が 3 つのマップで構成される場合、3 つすべてをここに追加します。この作業は、[Level] のプルダウンメニューから、[Level]→[New From File](ファイルから新規) を選択して行います。ストリーミング レベルを追加する順番は重要ではありませんが、 UnrealEd? の今後のバージョンではレベルが整理できるよう順番の並べ替えもサポートする予定です。最終的には下のイメージのような状態で終わるはずです。 レベルのストリーム インには、距離と Kismet の二つの方法があります。距離によるストリーミング入出力は、レベル原点からの距離に基づいて行われます。一方、Kismet によるストリーミングを使うと、デザイナーは Kismet スクリプトを介して、思い通りのレベルの入出力が行えるようになり、この方法がもっともよく使われています。
- レベルのストリーム インには、距離と Kismet の 2 つの方法があります。
- 距離によるストリーミング入出力は、レベル原点からのプレイヤーの距離に基づいて行われます。
- Kismet のストリーミングは、デザイナーが Kismet スクリプトを介して思い通りのレベルの入出力が行えるので、よく使われる方法です。
例1: ストリームした 3 つのレベルを追加した後のレベル ブラウザ
‘CURRENT’と表示されているレベルは、エディター ウィンドウまたは Kismet で行われた変更に伴って修正されます。これにより、書込み可能なマップであれば、複数のマップで簡単に作業することができるようになります。例えば保存のボタンを押すと、‘CURRENT’ レベルを保存(もしくは、[Save All Levels](すべてのレベルを保存)のボタンをクリックして持続レベルを含むリスト上の全マップを保存)します。
Visible のチェックボックスでは、エディターでレベルを表示するか非表示にするかを切り替えることができますが、これは視覚上のことだけで、ゲーム実行時にレベルがストリーム インされるかどうかには関係していません。ただし、ここで不可視なレベルについては、レベルのリビルド結果が反映されませんので、複雑なレベルがある場合には不可視にしておくと、大きく時間を節約することができます。
Persistent レベルから、ストリームしたレベルを永久に削除するには、ブラウザのプルダウンメニューにある[level]から[Remove level](ワールドからレベルを削除)を選択します。レベルのストリーム方法を変更したい場合は、一旦レベルを削除して再追加し、採用したいストリーム方法を選択します。現在のところ、[Load] と [Unload]、[Lock/Unlock](ロック/アンロック) のアイコン、そして[Draw Bounding Box](境界ボックスを描画する)フラグは作動しません。
例2: 右クリックから、[Make Current](現在のレベルを作成)を選択して作業中のレベルへ移動
Persistentレベルの作成方法
- UnrealEd? で新規マップを作成
- 立方体など、単純な形状の BSP ジオメトリを追加
- プレーヤスタート地点を追加
- レベルブラウザにストリームしたいレベルを追加
- マップを保存して命名
Kismet でのスクリプト済みストリーミングの方法
- Kismet を開く
- レベルをスタートアップに設定([New Event](新しいイベント) → [Level Loaded](レベルのロード))
- 存在するレベルの数だけ[Stream Level](レベル ストリーム)を実行([New Action](新しい操作)→[レベル]→[Stream Level](レベル ストリーム))
- [Stream Level](レベル ストリーム)の各操作をクリックして、LevelName ([レベル名) と表示されたところにレベル名を入力して、対応するレベルを追加する。
- [Stream Level](レベル ストリーム)の各操作への[Load](ロード) とレベルのロードを接続
例3: Kismet で 3 つのレベルをロード
ここで、ロード時に可視と設定しておけば、持続レベルを起動してストリーミング レベルを検査できるはずです。パフォーマンス上の理由で可視と設定しなかったレベルがある場合は、トリガの設定かその他の方法により可視にします。例えば、Headquarters_3 は開始時にプレーヤが見るにはあまりにも遠いので、リソースを他のものに使うために後で可視にすることにします。Kismet には[New Action](新しい操作)→[Level] に[Change Level Visibility](レベルの可視性を変更)という機能があります。この操作によりストリームしたレベルの表示と非表示を任意に切り替えることができます。Stream Level の操作で Unload のイベントを使った場合、レベルはメモリからアンロードされます。これはメモリを開放するという利点がある反面、可視にしたい時に Load イベントを使用しておく必要があります。
スクリプト済みストリーミングの手順リスト
- Kismet を開く
- LevelLoaded (レベルのロード) および StreamLevel (レベル ストリーム) の操作を追加し、スタートアップを Load に接続
- Stream Level(レベル ストリーム)で左クリックし、[LevelName] (レベル名) のフィールドにストリームしたいレベルの名前を追加し、bMakeVisibleAfterLoad フラグをチェック
- マップを保存しゲームを起動
距離ベースによるストリーミング
例4: 距離に基づくストリーミングの設定
距離によるストリーミングの手順リスト
- "Generic Browser" を開く
- "Level" (レベル) のタブをクリック
- Generic ブラウザのファイルメニューから[Level]→[New From File](ファイルから新規作成) を選択し、ストリーム インしたいレベルを選択
- "Distance" ストリーミングを選択
- "Persistent Level" が選択状態であることを確認し、右端に WorldInfo のプロパティを展開。WorldInfo_# で右クリックして "Edit Properties" を選択
- 開いているプロパティ メニューで、WorldInfo に続いて StreamingLevels を展開
- レベルをワールドにストリーム インする、ゲーム内におけるプレーヤからの距離を入力し、この距離を測定する原点となるワールド スペースの座標位置を変更します。
ストリームしたレベルを操作する
ローディングおよびイベント
通常レベルがロードされた時に多くのイベントを展開させる "Level Startup" (レベル スタートアップ) の操作に代わり、新しいKismetの操作が追加されました。この操作は "Level Loaded And Visible" (レベルをロードして可視にする) という名の機能です。基本的には "Level Startup" と同様の働きをしますが、 "Change Level Visibility" (レベルの可視性を変更) の操作と併用するように作られています。レベルがプレーヤに可視になっているときは、CLV とストリーム インのいずれの方法でも、[bMakeVisibleAfterLoad] (ロード後可視にする) がチェックされていれば、 "Loaded And Visible" (ロードして可視にする) が発動されます。 "Remote Events" (リモート イベント) と一緒に使うことにより、ストリームしたレベルを、イベントの授受のほか、ロードおよびアンロードも必要に応じて行うことができる、自己完結のエンティティとすることができます。例えば下のイメージでは、主題となるレベルが可視になると共にプレーヤがテレポートし、他のレベルからリモート イベントが発動されると何らかの生物のスポーンも行います。
例5: ストリーム レベルのサンプル スクリプト
アクタのレベル間の移動
2007 年 12 月 QA 承認済みビルドの時点で、アクタを単純に 1 つのレベルからコピー (Ctrl + C) して、現在のレベルを変更し、貼り付ける (Ctrl + V) だけで、アクタのレベル間移動ができるようになりました。しかしながら、これは MoveSelectedActorsToCurrentLevel のものと似たようなパスウェイを使用するので、アクタ間の潜在的なリファレンスを解決するためには、アクタを スクラッチ ワールドに直列化しなければいけません。この機能は変更リスト #203995 と #206418 で導入されました。 2007 年 1 月 QA 承認済みビルド以前のビルドでは、一度にたくさんのアクタを移動させた場合は、 メモリ不足 が起こったかも知れませんが、これはエディタ トランザクション バッファのパフォーマンス (とメモリ使用量) を修正した際に修正されました (変更リスト #206829)。 また、2007 年 1 月 QA 承認ビルドでは、 レベル ブラウザ参照 内の [New Level from Selected Actors] (選択されたアクタから新しいレベル) ボタンで、アクタを新しいレベルへ移動することができます (変更リスト #206324)。最適化
ほとんどのデベロッパーは、パフォーマンスやワークフローのためには、ストリーミング レベルが高ければ高いほど良いと感じるはずです。しかしながら、これは現在システムにある制限要因で調節されるはずです。すなわち、一つのレベルに設置されたアクタは、他のレベルにより kismet 内で直接リファレンスされることができません。遠隔イベントは、ストリーミング レベル全体でイベントをトリガするために発動され、受信されますが、この時点ではレベル全体でアクタを直接することはできません。上記の写真では、Pathnode_0 と Pathnode_1 はこのスクリプトと同じレベルに位置していなければならず、この場合では Headquarters_2 です。もし、これらどちらかのノードが HQ_1 または 3 にあった場合は、これらの操作は機能しません。 2007 年 12 月 QA 承認済みビルド以降、既存のレベルをストリーミング チャンクにより簡単に分ける機能があります。- ワールド内でたくさんのアクタを選択します。
- レベル ブラウザの Level (レベル) にある New Level from Selected Actors (選択されたアクタから新しいレベル) を選択します。
- 新しいストリーミング レベルがディスクに作成され、ワールドに追加されます。その後、選択されたアクタは新しいレベルに移動されます。
