マニュアル:表示方向(DisplayDirection)と視線の方向(FaceDirection)

ACTION GAME MAKERでは、各ステートで、オブジェクトの向きに応じたアニメーションを再生する表示方向というシステムを搭載しています。
このマニュアルでは、表示方向を制御する方法について解説します。

表示方向を設定するアニメーションセットについてのマニュアルはこちら:マニュアル: アニメーションセットの詳細設定

表示方向システムの概要

表示方向は、8方向で設定することが可能です。

表示方向の設定

表示方向は、各ステートの「表示方向」で変更することができます。
さらに、FaceDirectionSettingsノードで設定できる「視線の向き」を使うことで、より詳細な設定をすることも可能になっています。

各ステートの「表示方向」設定

表示方向は以下のいずれかを選んで設定することができます。
移動方向: 常に移動している方向と同期します。
移動キーの方向: 常にオブジェクトに設定された移動キーが入力された方向と同期します。
右/左: 常に右か左の方向を向きます。
FaceDirectionSettingsを使う: 後述のFaceDirectionSettingsノードで設定した視線の向きに応じた方向を向きます。

設定した表示方向は、同じステートの間維持されます。

FaceDirectionSettingsノード(視線の方向設定)

「視線の方向」を指定するためのノードです。
オブジェクトの子として配置することで機能します。
FaceDirectionSettingsでは、以下の設定が可能です。

移動方向: 常に移動している方向と同期します。
移動キーの方向: 常にオブジェクトに設定された移動キーが入力された方向と同期します。
変更しない(Free): アクションやスクリプトで変更されるまで表示方向を変更しません。
指定したオブジェクトの方向:指定したオブジェクトの方向を向きます。
指定したグループ:最も近くにある指定したグループのオブジェクトの方向を向きます。

FaceDirectionSettingsの各設定は、実行アクション「オブジェクトのプロパティを変更(ChangeObjectProperty)」で変更することもできます。

視線の方向(FaceDirection)は表示方向(DisplayDirection)とは別の変数となりますが、前述の通り、各ステートの表示方向設定で視線の方向を表示方向として使用することができます。

実行アクション「視線の方向を変更(ChangeFaceDirection)」

視線の方向を変更することができます。
表示向きではなく、あくまで視線の方向
そのため、ステートの表示向き設定が「FaceDirectionSettingsを使う」、かつFaceDirectionSettingsが「変更しない(Free)」ではない場合は変更を行っても即座に上書きされてしまう可能性があるので注意してください。

「視線の方向を変更(ChangeFaceDirection)」では以下から設定が可能です。

角度: 右方向を0度とした360度で指定します。
方向: 8方向から直接選択します。
変数: 変数の値を度として方向を指定します。
移動方向: 実行時点の移動方向を向きます。
指定したオブジェクト: 指定したオブジェクトの方向を向きます。

表示方向と表示方向変数(visible_direction)

visible_direction変数現在向いている方向を45度ずつの変数として表示します。
右: 0度、右下:45度、下:90度といった形です。
この変数はあくまで現在向いている方向を便宜的に変数の値として示すものなので、この変数に代入をしても何も変化はおきません。
そのため、現在の方向に応じて向きを変更したい場合は以下のような手順で実現できます。

  1. visible_direction変数を別の変数Aに代入。
  2. 変数Aの値に変更したい角度の値を加算。
  3. 表示向きを変更(ChangeFaceDirection)アクションで変数Aの値を元に表示向きを変更する。

表示方向の活用例

マリオのようなすべり移動

MoveAndJumpSettingsで移動モードを加速
表示向き設定を移動キーの方向とすることで、逆方向を向きながらブレーキといったマリオ風の移動が可能になります。

移動を伴わないで任意のスティックの方向を向く

ChangeAngleSettingsとグループの方向に向くをつかって実現します。

  1. GameObjectの子としてNode2Dを追加します。わかりやすくTargetRootとリネームします。
  2. さらに、TargetRootノードの子としてNode2Dを追加し、わかりやすくTargetとリネームします。
  3. Targetノードのインスペクターのトランスフォームで位置をx=100 y=0に変更します。
  4. Targetノードに任意の名称のグループを追加します。
  5. GameObjectの子としてChangeAngleSettingsを追加します。
  6. ChangeAngleSettingsのインスペクターで、右、もしくは左のスティックを使うを有効化し、対象ノードとしてTargetRootを指定します。
  7. FaceDirectionSettingsでTargetノードに指定したグループ名を追従するように設定すれば完成です。

【仕組みの解説】
ChangeAngleSettingsノードはスティックに応じてTargetRootノードを回転させます。
Targetノードは、TargetRootノードの原点から右方向にずれて配置されているため、TargetRootノードを回転させると円を描いて回転します。
FaceDirectionSettingsでは円運動を行うTargetノードを追従するため、スティックの方向に向くようになります。

マウスカーソルの方向を向く

まずはマウスカーソル用のオブジェクトを作成します。

  1. 新しいゲームオブジェクトを作成します。テンプレートを使用:GDScrip_sampleでタイプSimpleCursorを選んで作成します。
    SimpleCursorはただ常にマウスの位置に追従するスクリプトを添付されたノードです。
  2. SimpleCursorを保存し、ゲームシーンのUIレイヤーに配置します。(通常レイヤーに配置する場合はオフセット等の影響を受けてしまう可能性があります。)
  3. FaceDirectionSettingsの対象ノードを指定で、SimpleCursorを追従するように設定します。

【備考】
前項目、「移動を伴わないで任意のスティックの方向を向く」のChangeAngleSettingsでマウスを使うを有効にすることでも同様の動作を実現できます。