マップ機能ではないマップ移動6【障害物に接触したら場面転換する設定】

Last-modified: 2023-08-30 (水) 16:22:43

衝突範囲と衝突範囲の接触でコマンドを発動させるスクリプト記述の一例です。

  1. キャラクターと障害物に衝突範囲を付与する。
  2. 衝突範囲同士の接触トリガーを設定する。

これにより、マップ上の街や家などに到着した際、場面を転換させるなどのギミックを行えます。



スクリプト記述例

スクリプト記述例はLight.vn基本サンプル(公式本体)を使用した場合を想定しています。ダウンロードはこちらから。

  • 新規スクリプト「sample_script.txt」内に
    //背景
    ~背景0 map maps/box.png | イン map 300
    //障害物
    ~絵0 tree1 maps/tree_02.png 50 -102 80 | 拡大 tree1 50% | イン tree1 300
    ~絵0 tree2 maps/tree_02.png 750 -450 80 | 拡大 tree2 50% | イン tree2 300
    ~絵0 tree3 maps/tree_02.png 750 250 80 | 拡大 tree3 50% | イン tree3 300
    ~絵0 door maps/door_cl.png 850 -200 80 | 拡大 door 20% | イン door 300
    //障害物当たり判定
    衝突範囲方形追加 door 0 0 668 1107 侵入禁止
    //キャラクター
    ~絵0 lam maps/tilemap_tut/lam/front_0.png 660 350 80 | 拡大 lam 300% | イン lam 300
    //キャラクター当たり判定
    衝突範囲方形追加 lam 0 0 32 48 侵入禁止
    衝突開始時 lam door "ジャンプ start0.txt"
    //キャラクター操作
    キーダウン a 方向移動x lam -400ups
    キーダウン d 方向移動x lam 400ups
    キーダウン w 方向移動y lam -400ups
    キーダウン s 方向移動y lam 400ups
    キーアップ a 方向移動x lam 0ups
    キーアップ d 方向移動x lam 0ups
    キーアップ w 方向移動y lam 0ups
    キーアップ s 方向移動y lam 0ups
    ~待機 続行禁止
    マップ機能ではないマップ移動


スクリプト解説

キャラクター(衝突範囲a)とドア(衝突範囲b)が接触すると任意コマンドを発動させる方法を解説していきます。


1. キャラクターと障害物(ドア)に衝突範囲を付与する

衝突範囲方形追加」コマンドでキャラクター(lam)と障害物(door)に対し衝突範囲を付与します。
以下、表示サンプル例。

  • スクリプト「sample_script.txt」内に
    ~絵0 door maps/door_cl.png 850 -200 80 | 拡大 door 20% | イン door 300
    //障害物当たり判定
    衝突範囲方形追加 door 0 0 668 1107 侵入禁止
    //キャラクター
    ~絵0 lam maps/tilemap_tut/lam/front_0.png 660 350 80 | 拡大 lam 300% | イン lam 300
    //キャラクター当たり判定
    衝突範囲方形追加 lam 0 0 32 48 侵入禁止
    衝突範囲
  • 今回の衝突範囲のサイズは基画像の大きさで指定しています。
  • 衝突範囲方形追加」オプションである「侵入禁止」を記述しておきます。
    他の衝突範囲(侵入禁止同士)と重ならない(接触時にすり抜けない)ようにするために必要です。


2. 衝突範囲と衝突範囲の接触で開始するコマンド設定

衝突開始時」コマンドで発動したいコマンドを指定します。
以下、表示サンプル例。

  • 上記に追記で
    衝突開始時 lam door "ジャンプ start0.txt"
    衝突開始時
  • 衝突開始時」コマンドは「衝突範囲a」と「衝突範囲b」が接触した瞬間に任意のコマンドを実行できます。
    例では「a」:衝突範囲キャラクター(lam)と「b」:衝突範囲障害物(door)を指定しています。
  • エディターの「衝突処理タブ」で設定している衝突処理を確認することができます。
  • 衝突範囲同士が重なっている間に発動する「衝突継続時」、衝突範囲同士が離れた瞬間に発動する「衝突終了時」も実装されています。
    ゲームギミックによって使い分けができるので便利なのです。