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

視線の先に

パズルの開始のUI

Heptoにおいて個々のパズルは展示物となっているので、それぞれに解説パネルを模したオブジェクトが配置されており、このオブジェクトをタッチ(クリック)するとパズル開始となる。

将来的にはゲームコントローラにも対応したいが、その場合、タッチではなくオブジェクトをフォーカス(対象物が縁取りされるとか、オブジェクトが光など)してコントローラのボタンを押して開始するような操作となる。

カメラにコライダーを

オブジェクトをフォーカスする方法として、画面中央付近にに対象オブジェクトが入ってくれば自動的にフォーカスされる手法がある。これを簡単に実装する方法として、カメラの前方にコライダーを配置して、これをトリガーとしてみた。

残念ながら、これはうまく動作しなかった。コライダーをトリガーとするには物理コンポーネントが必要だが、これを付加すると Cinemachineカメラの挙動がおかしくなった。これは Virtualカメラにつけても同じ。

視線を計算

次に検討したのは、視線方向(カメラの正面方向のベクトル)と、カメラから対象オブジェクトへのベクトルが一定角度内であればフォーカスされる、というロジックを検討した。

ただし、パズル開始用オブジェクトは複数あるため、全てを常時計算する訳にはいかないので、以下の条件で刈り取っていった。

  • カメラの視界にはいった(レンダリング対象となった)オブジェクトを対象とし
  • そのオブジェクトとカメラの距離が一定距離以下である場合
  • そのオブジェクトの方向と視線の角度を計算し一定角度以下であればフォーカスする

これにより大きな処理負荷をかけずに視線を向けた先のオブジェクトを自然にフォーカスさせることができた。