レイヤー機能とGameSceneのプリセットノード
ACTION GAME MAKERではシーン作成時、SceneLayerというノードとDistantView, MiddleView, NearView, WallLayer, BaseLayerというノード、そしてPost Effect Layer、UIというノードが自動で生成されます。
このマニュアルではこれらのノードの役割について解説を行います。
SceneLayer(Backgroundノード)
SceneLayerはACTION GAME MAKER用ノードであるBackgroundノードをリネームしたものになります。後述のParallax2Dノードと組み合わせることで、一般的な他ツールでいうところの「描画レイヤー」の動きを実現するためのノードです。
GodotEngineでは、設計思想上描画順序はZ座標パラメータ、グループ管理はノードの階層構造で行うところとなっており、一般的な意味での「レイヤー」に相当するノードはありません。(Layerと名がつくノードはありますが特殊な描画処理を行うためのものです)
しかし、ヴィジュアルスクリプトの仕組み上レイヤーの概念がある方が良いと考えたため、描画レイヤー機能を実現するために専用ノードを設計しています。
DistantView, MiddleView, NearView, WallLayer, BaseLayer(Parallax2Dノード)
これらのノードは名前こそ違いますが、すべて同一のParallax2DというGodotノードをリネームしたものとなります。
Parallax2Dは本来視差背景を実現するためのノードでその機能も利用できますが、ACTION GAME MAKERでは、もう一つ重要な機能を持ちます。
SceneLayerの子であるParallax2Dを描画レイヤーとして認識する、ということです。
では、レイヤーを使ってどのようなことができるのでしょうか。
レイヤーを使うアクション/ノード
レイヤーを移動(MoveLayer)
オブジェクトを指定のレイヤー(Parallax2D)の子ノードに移動することで描画順を変更します。
レイヤーを表示(Show)/非表示(Hide)/有効化(Enable)/無効化(Disable)
番号に一致するレイヤー(Parallax2D)とその子の動作を変更します。番号は、SceneLayerの子であるParallax2Dの上から順となります。つまり、デフォルト状態ではDistantViewがレイヤー1で、BaseLayerがレイヤー5です。
オブジェクトを生成(GenerateObject)/弾を発射(FireBullet)
ObjectMountTargetで指定をしない場合、発射元のオブジェクトが属するレイヤー(Parallax2D)の子ノードとして生成されます。つまり、未指定の場合発射元のオブジェクトの子ではなく、兄弟として生成されることには注意が必要です。
Portalノード
ポータルを使って遷移したプレイヤーはポータルの属するレイヤー(Parallax2D)の子として遷移後生成されます。
PostEffectLayer
CanvasLayerというGodot用ノードをリネームしたものになります。CanvasLayerとは、カメラの影響などを受けない=画面に常に表示することができるという特殊なレイヤーを実現するノードになります。
PostEffectLayerはポストエフェクトというシーン全体に効果を及ぼす画面効果を実現するためのノードで、画面効果を設定/削除(Add/CancelSceneEffect)のアクションで画面効果を発揮するために必要となります。
UI
PostEffectLayer同様、CanvasLayerというGodot用ノードをリネームしたものになります。ACTION GAME MAKERでは、メニューを表示/非表示(Open/CloseMenu)のアクションの表示先や、HPバー等のHUDの表示先として使用されます。
注意点として、UIレイヤーにはParallax2Dが存在しないため、ヴィジュアルスクリプトではレイヤーとして認識されません。メニューレイヤーにオブジェクトを生成する際には[ObjectMountTarget]の併用が必要となります。
レイヤー利用上の注意点: 衝突処理
ACTION GAME MAKERの各レイヤーでは描画順の処理を行いますが、衝突処理はCollisionLayer/Maskによって行われます。そのため、UIレイヤーにあるモノにBaseLayerのオブジェクトが衝突するということが発生しますのでご注意ください。