この記事では、Nieで採用しているクロスフェード付きマップ移動の演出と、その実装について解説します。
あらまし
この記事でいうクロスフェード付きマップ移動とは、次のように暗転せずにマップを遷移することを指します。
上図では、エルクの村に入るときはクロスフェードで、村から室内に入るときは暗転でマップを遷移しています。この演出によって、「エルクの村の前」マップと、「エルクの村」マップが、ひとつながりであるように感じさせることができます。
このとき、長いマップ読み込みが発生すると、クロスフェードの直前で画面が固まってしまいます。そういった現象を回避できるように、Nieのマップ管理システムは、複数のマップを事前に読み込み、都度切り替える機能を有しています。
マップ管理システムの構成
Nieのマップ管理システムは、大まかに〝マップマネージャ〟と〝マップインスタンス〟に分かれています。
マップインスタンスは、ツクールエディタで作成するマップの一画面に対応する、個々のマップ画面です。
マップマネージャは、同時に複数のマップインスタンスを生成できますが、そのうち一つだけを〝アクティブ〟なマップインスタンスとみなします。それがプレイヤーキャラが歩き回るマップに相当します。
マップインスタンスには、マップに存在するオブジェクト(ユニット)と、そのマップ専用のビューポートが割り当てられています。アクティブなマップインスタンスが切り替わると、アクティブになったマップインスタンスのユニットがマップマネージャに登録され、ビューポートが可視化されます。アクティブで無くなったマップインスタンスは、その逆の処理が行われます。
非アクティブなマップインスタンスは、更新・描画処理を行わないので実行負荷はかかりませんが、読み込んだマップの分だけメモリを消費します。
実際にどう実装されているかついては、公開されているNieのプロジェクトから、Map::Manager
やMap::Instance
を参照してください。
事前に読み込むマップの指定
Nieでは、サブマップを持つマップに入ったとき、そのマップを読み込むのと同時に、指定したサブマップをまとめて読み込みます。
この〝サブマップ〟は、ツクールエディタのマップの設定にある「メモ」に特殊な記法で指定します。(Nieのプロジェクトではこの手法を多用しており、「メモ作戦」と呼んでいます。使用例:「この技だけ当たりにくくしたいんだけどどうしよう…」「メモ作戦で、パラメータ足しましょう」)
|
|
「エルクの村 (Map id.5)」には、サブマップとして「エルクの村の前 (Map id.10)」が指定されています。この指定に従って、マップマネージャは、「エルクの村」に入ったときに、「エルクの村の前」も事前に読み込みます。
複数のマップを読み込むので当然ですが、サブマップが多くなると、その分だけロード時間が長くなります。またあまりに大きすぎるマップをサブマップに指定すると、その分メモリも消費します。そういった事情を考慮して、Nieでは、町の前や、室内の別部屋など、ちょっとした隣接マップに対してこの機能を使うようにしています。<終>