【UnityVR】生きていたので、プレイヤーが凝視しているかを取得する話を

スポンサードリンク

こんにちは。ふぁんたです。



親知らずを抜いても生きていたので、UnityVRでの「凝視しているか」を取得する話をしたいと思います。


そもそもなぜ凝視しているかを取得したいと思ったか


前置きとしてこの話をしておきたいと思ったのですが、一言で済みました。

「ホラーゲームではどこ見てるか大事だから」

以上です。

方法1(失敗)Ray


まずは、ヘッドマウントディスプレイ(Cameraのeye)から、ながーいRayを発射して、遠くに置いてある「注視してほしいもの」との接触判定を取る ということを考えました。

「目線」って言うし、線状のRayで衝突させればいけるやろ、と思ってました。



最初にカッコ書きでも書きましたが、この方法は失敗でした。

原因はかんたんで、「長距離の判定では少しの角度差が致命的なのに、人々のヘッドマウントディスプレイのかぶり方は一定ではない」ということでした。



テストプレイでは、100メートル先の物体を3秒間見続けることは一度もできませんでした。





2つ目の方法を教えて頂く前に、「だんだん広がるRay」なるものも思いついて画策したんですが、「Rayそのものの座標を取ることはできない(=Rayの形を発射点との距離に比例した半径の円とすることはできない)」のでだめでした。


方法2(成功)ConeCollider


教えていただきました。

「Colliderがありますよ。」



…そもそも、Rayに拘る必要はなかったわけです。

ConeCollider

こんなAssetがあります。



こいつをimportして、感知したいオブジェクトの下にEmptyを作って。

そのEmptyにこれをつけて、角度を調節して。

is Triggerにチェックを入れると、衝突した際のスクリプトをOnTriggerEnter,Stay,Exit内に記述できるようになります。



使う距離やシチュエーションにもよるとは思いますが、

だいたい中心角は「5度」ほどがよいと思います。



大変かとは思いますが、角度や長さは調整しながら行ってください。



おんなじAssetで、「手に持っている懐中電灯がどこを照らしているか」みたいなことを取得することもできます。



お試しあれ。

製作中のホラーゲームは、これで行こうと思います。



スポンサードリンク