人生

やっていきましょう

558日目

障害物の当たり判定が正常に機能しない問題について考えた。具体的には、動いている障害物が主人公に触れたとき、画面上では触れていないにもかかわらず、なぜか触れた扱いになってしまっているというものだ。

原因を調べていたところ、障害物が「半歩移動」ではなく「全歩移動」に設定されていたことが分かった。元々このゲームは「半歩移動」で設定されており、以前何らかの理由があって「全歩移動」に設定したのだった。

なぜ「半歩移動」のままでなく「全歩移動」にしたのか。その原因は「全歩移動」を外してみて分かった。「半歩移動」のままイベントが主人公に衝突すると、イベントが適切に反応しないという現象が起こった。

イベントの発生条件を「イベント接触」にした状態で「半歩移動」のイベントを上から下に主人公に衝突させると、動画のように判定が機能しなくなるというバグがある。これはこちら側の問題というよりはウディタ側の不具合であり、自分にはどうしようもできない問題だ。

おそらく以前も同じ問題に直面し、どうにか「全歩移動」にしたことで問題を誤魔化したのだろう。ただ「全歩移動」にしたとしても同様のバグがごくまれに発生するばかりか、触れてもいないのに触れたことになるという別の不具合が発生してしまう。

しばらく色々と試したところ「全歩移動」の不具合の解決方法が見つかった。「ウェイト」を1フレーム挟む、これだけでよかった。

詳しいことは分からないが、イベントが主人公に接触した際に毎回ファイルから効果音を呼び出しており、その呼び込みにかかる時間を待たずに場所移動を行っていたことが原因であるように思う。1フレーム待つことで、ちゃんと触れた瞬間に飛ぶようになり、避けゲーとしての機能を果たすようになった。

だが1つ問題がある。ごくまれに発生する「半歩移動」の不具合が残っているということだ。「全歩移動」のイベントが「半歩移動」の主人公に上から衝突した場合、接触したことにならないという不具合がある。

この問題は主人公を「全歩移動」にすることで解決する。これにより「全歩移動」と「全歩移動」が衝突することになるので、問題なく接触できるようになる。

だが主人公を「全歩移動」にすることで、これまで「半歩移動」を想定していたゲーム全体に多くの不具合が発生することが懸念される。そこで障害物回避のマップに限定して「全歩移動」を行うとしても良いが、そうなると今まで「半歩移動」の感覚に慣れていたプレイヤーが突然「全歩移動」を行わなければならなくなり、違和感が出てしまう(「半歩移動」の場合は、移動キーを軽く打つと半歩、少し長く打つと全歩という操作の違いがあった)。

個人的には半歩のままで様子を見ても良いと思う。ウディタの側でこの問題が修正されたとき、アップデートされたシステムと置き換えれば自然と問題が調整されるからだ。イベントが触れていないのに触れた判定になっていた問題よりはそこまで深刻でもないので、今は放置する。

 これでギミックは完成した。残すは2章の終盤とクリア後の扱いであり、この2つを終えて今年は終わると思う。