【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で、「手に持っている懐中電灯がどこを照らしているか」みたいなことを取得することもできます。

 

お試しあれ。

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

 

 

スポンサードリンク

未分類

Posted by phanta