[やりたいこと]
プロ版で一定範囲内に入るとSEと共にイベントにセットされたチップが変化して扉が開き、範囲内にいる間は開き続け範囲外に出るとSEと共に閉じる、というのをコモンでやりたいです。
[やってみたこと]
レビニアさんの「【ウディタ解説】近づくと起動して離れると停止するコモンを作る【自作】」と未知広さんの「ウディタでお手軽にドアを開け閉めする演出コモンを作成! めっちゃ丁寧に解説します」を参考に以下のコモンを作りました。
起動条件 呼び出しのみ
▼呼出元マップイベントと主人公の距離を算出
■変数操作+:CSelf10[接触範囲X]=このマップイベントの接触範囲拡張X
■変数操作+:CSelf11[接触範囲Y]=このマップイベントの接触範囲拡張Y
■変数操作+:CSelf12[呼出元X]=このマップイベントのX座標(精密)
■変数操作+:CSelf13[呼出元Y]=このマップイベントのY座標(精密)
■変数操作+:CSelf14[主人公X]=主人公のX座標(精密)
■変数操作+:CSelf15[主人公Y]=主人公のY座標(精密)
■変数操作+:CSelf16[Evとの距離X]絶対値=Cself14[主人公X]-CSelf12[呼出元X]
■変数操作+:CSelf17[Evとの距離Y]絶対値=Cself15[主人公X]-CSelf13[呼出元Y]
▼接触範囲外なら「0」を返す(停止)
■変数操作+:CSelf0[マップEvID]=現在のマップID
■ウェイト:1フレーム
■条件分岐(変数):【1】CSelf16[Evとの距離X]がCSelf10[接触範囲X]以上【2】CSelf17[Evとの距離Y]がCSelf11[接触範囲Y]以上
◇分岐:【1】[CSelf16[Evとの距離X]がCSelf10[接触範囲X]以上]の場合↓
│■サウンド:SEファイル[SE/開く音.mp3]音100%(0チャンネル)再生/遅延:0フレーム
│■ウェイト:1フレーム
│■動作指定:このイベント/上向/ウエイト2フレーム/右向/ウェイト2フレーム/左向/ウェイト2フレーム/下向/すり抜けOFF
│■変数操作:Cself4[起動/停止]=0+0
│■イベント処理中断
│■
◇分岐【2】[CSelf17[Evとの距離Y]がCSelf11[接触範囲Y]以上]の場合↓
│■サウンド:SEファイル[SE/開く音.mp3]音100%(0チャンネル)再生/遅延:0フレーム
│■ウェイト:1フレーム
│■動作指定:このイベント/上向/ウエイト2フレーム/右向/ウェイト2フレーム/左向/ウェイト2フレーム/下向/すり抜けOFF
│■変数操作:Cself4[起動/停止]=0+0
│■イベント処理中断
│■
◇分岐終了◇
■条件分岐(変数):【1】Cself4【起動/停止】が0と同じ【2】Cself4【起動/停止】が1以上
│◇分岐:【1】Cself4【起動/停止】が0と同じの場合↓
│▼接触範囲内で未起動なら「1」を返す(起動)
│■サウンド:SEファイル[SE/閉まる音.mp3]音100%(0チャンネル)再生/遅延:0フレーム
│■ウェイト:1フレーム
│■動作指定このイベント/下向/ウエイト2フレーム/左向/ウェイト2フレーム/右向/ウェイト2フレーム/上向/すり抜けON
│■変数操作:Cself4[起動/停止]=1+0
│■
◇分岐:【2】[CSelf4[起動/停止]が1以上]の場合↓
│▼接触範囲内且つ既に起動しているなら「2」を返す(起動済み)
│■ウェイト1フレーム
│■変数操作:CSelf4[起動/停止]=2+0
│■
◇分岐終了◇
■
イベントには上から順に
1:閉じているドア
2:少し開いているドア
3:更に開いているドア
4:開ききったドア
と、なっているマップチップをセットしました。
[やってみた結果、どううまくいかないか]
縦に扉のイベント上を通り抜けようとするとSEはちゃんとなるのですが扉がガチャガチャ動いて自然に開いているように見えません。その時SEが何度も重なって聞こえてしまったりもします。イベント横を縦に通ると扉がビクビク動いているような挙動をしてしまいます。
また、イベントを横に通り抜けると今度はSEが鳴った後扉が開きっぱなしになってしまいます。こうなると縦に通り抜け直さないと範囲内に入った時びくつくだけでSEも鳴らず、上手く動きません。
別のコモンを使ってこの自動ドアのコモンのCSelf4の起動/停止をピクチャ表示して監視したところ、縦に通り抜けた時は範囲外で0、範囲内で1、横に通り抜けた時は1度通ってしまうと後の扉が開きっぱなしになっている時は2になり続けていました。
スムーズに自然な動きで扉の開け閉めできるようにセットしたいのですが、私の知恵ではどこが悪いのか分かりません。
試しにウェイトを1フレームを所々に差し込んでみたり動作の後に動作完了までウェイトを差し込んでみたりしても改善しませんでした。
問題点が分からず、またいい解決策も思いつかず、ほとほと困り果てております。
皆様のお知恵をお借り出来たらと思います。
よろしくお願い致します。