ウディタで「監視カメラ」を作る

現在制作中のゲームで潜入ミッションみたいなのがあると面白いなと思い、仕掛けとして監視カメラを作ることにしました。機能的にはごく簡易的なものですが、ウディタのイベントを上手く使うと簡単に作れるので今回はその方法について書きます。

ゲームの監視カメラの仕様

まず、仕様については次のとおりです。

  • 使用するイベントは2つで、「カメラ本体」と「視界範囲」(接触イベント用)のセットで使う。
  • 一定時間おきにカメラがON・OFFする。
  • カメラがONのとき、カメラの視界範囲に主人公が入るとイベントが発生する(ゲームーオーバー等)。
  • 視界範囲の表示は別途用意した「接触範囲表示コモン」を使用する。このコモンは、呼び出し元のイベントの接触範囲を赤く表示する。

イメージ画像はこんな感じです。

ウディタで作る監視カメラの仕掛け

赤いところが視界範囲で、壁のくぼみにあるのがカメラの本体です。

イベントの設定

カメラ本体

ウディタで監視カメラを作る(1)ウディタで監視カメラを作る(2)

  • ページ1では、指定した秒数が経ったらカメラ自身と視界範囲をOFFにします(並列実行)。
  • ページ2では、指定した秒数が経ったらカメラ自身と視界範囲をONにします(並列実行)。

視界範囲

ウディタで監視カメラを作る(3) ウディタで監視カメラを作る(4) ウディタで監視カメラを作る(5)

  • ページ1では、接触範囲表示コモンで接触範囲を表示したあと、ページ2に移ります(並列実行)。
  • ページ2では、主人公が接触範囲に接触したときのイベントを実行します(イベント接触)。ここで起動条件がイベント接触なのは、カメラがOFF→ONになったとき、主人公が視界範囲に入っていてもイベントが起動するようにするためです(プレイヤー接触だと主人公が動かない限りイベントが起動しない)。
  • ページ3では、カメラがOFFになったとき接触範囲の表示を消去します。ウェイトを入れているのはこの処理が何度も行われないようにするためです。

接触範囲表示コモン

最後は接触範囲を表示するコモンの内容です。

▼ 入力値チェック
■変数操作: CSelf1[対象イベントID] 下限= -1 + 0 
▼ 
▼ 設定
■変数操作: CSelf10[基本ピクチャ番号] = 200 + 0 
■変数操作: CSelf12[チップサイズ] = 32 + 0 
■変数操作: CSelf14[処理時間] = 0 + 0 
▼ 
▼ 情報取得
■条件分岐(変数): 【1】 CSelf1[対象イベントID] が 0 以上 
-◇分岐: 【1】 [ CSelf1[対象イベントID] が 0 以上 ]の場合↓
 |■変数操作+: CSelf30[接触範囲X] = キャラ[CSelf1[対象イベントID]] の 接触範囲拡張X
 |■変数操作+: CSelf31[接触範囲Y] = キャラ[CSelf1[対象イベントID]] の 接触範囲拡張Y
 |■変数操作+: CSelf32[イベント座標X] = キャラ[CSelf1[対象イベントID]] の 画面X座標
 |■変数操作+: CSelf33[イベント座標Y] = キャラ[CSelf1[対象イベントID]] の 画面Y座標
 |■
-◇上記以外
 |▼ 呼び出し元イベント
 |■変数操作+: CSelf30[接触範囲X] = このマップイベント の 接触範囲拡張X
 |■変数操作+: CSelf31[接触範囲Y] = このマップイベント の 接触範囲拡張Y
 |■変数操作+: CSelf32[イベント座標X] = このマップイベント の 画面X座標
 |■変数操作+: CSelf33[イベント座標Y] = このマップイベント の 画面Y座標
 |■
◇分岐終了◇
▼ 
▼ 変数操作
■条件分岐(変数): 【1】 CSelf1[対象イベントID] が -1 と同じ 
-◇分岐: 【1】 [ CSelf1[対象イベントID] が -1 と同じ ]の場合↓
 |■変数操作+: CSelf1[対象イベントID] = このマップイベント の イベントID
 |■
◇分岐終了◇
■変数操作: CSelf10[基本ピクチャ番号] += CSelf1[対象イベントID] + 0 
▼ イベント自身のサイズも含めるので+1
■変数操作: CSelf20[ピクチャ横幅] = CSelf30[接触範囲X] + 1 
■変数操作: CSelf21[ピクチャ縦幅] = CSelf31[接触範囲Y] + 1 
■変数操作: CSelf20[ピクチャ横幅] *= CSelf12[チップサイズ] + 0 
■変数操作: CSelf21[ピクチャ縦幅] *= CSelf12[チップサイズ] + 0 
▼ イベントのY座標の基準が足元らしいので、チップサイズの半分だけ上にずらす
■変数操作: CSelf13[一時変数] = CSelf12[チップサイズ] / 2 
■変数操作: CSelf33[イベント座標Y] -= CSelf13[一時変数] + 0 
▼ 
■条件分岐(変数): 【1】 CSelf0[モード] が 0 と同じ 
-◇分岐: 【1】 [ CSelf0[モード] が 0 と同じ ]の場合↓
 |▼ 表示
 |■ピクチャ表示:CSelf10[基本ピクチャ番号] [中心]ウィンドウ「<SQUARE>」サイズ[CSelf20[ピクチャ横幅],CSelf21[ピクチャ縦幅]] X:CSelf32[イベント座標X] Y:CSelf33[イベント座標Y] / CSelf14[処理時間](0)フレーム / パターン 1 / 透 128 / 通常 / 角 0 / 拡 100% / カラー R[200] G[50] B[50]
 |■
-◇上記以外
 |▼ 消去
 |■ピクチャ消去:CSelf10[基本ピクチャ番号] / CSelf14[処理時間](0)フレーム
 |■
◇分岐終了◇
■ウェイト:1 フレーム

「変数操作+」コマンドを使うと、比較的簡単な処理で実現できます。