We will entertain your mind, enhance your brain, expand your lifestyle.

ロジックのお話

Colliderを使った処理

Heptoのパズルロジックをプログラミングしている。いま作っているパズルは複数の額縁を移動させて解くもの。その移動に当たっては、他の額縁や一定領域の枠に当たればそれ以上移動しないロジックが必要となる。このロジックを難しくしている原因は、額縁の形状が “L” の様な凹みのある多角形であること。

最初に、Unityの Colliderを使用することとした。Unityにある機能だし、凹みのある形状も Mesh Colliderで対応してくれる。

しかし、開発していくと色々と問題点があった。

  • 移動させないと、衝突が検出できない。上に障害物があるので、上移動のボタンを無効にする、といった処理ができない
  • Mesh Collider同士が衝突検知できない
  • Meshを避けて、別途Box Colliderを複数追加すると接触していないのに追加した数だけ衝突通知が上がり、またタッチ検知のためのレイキャストの妨げとなる

地道な処理

そこで昔ながらの、額縁が動く範囲を移動単位で区分けして配列とし、そこに額縁の形状のビットパターンを並べていく処理とした。単純で計算も少なく移動前に衝突を検出可能である。

課題があるとすれば、形状に合わせてビットパターンを用意しなければならないことと、複雑な形状や立体物は扱えないこと。そのときには、Box Colliderの集合体のような衝突検知を自前で作成することとなるだろう。