【UnityVR】生きていたので、プレイヤーが凝視しているかを取得する話を
スポンサードリンク
こんにちは。ふぁんたです。
親知らずを抜いても生きていたので、UnityVRでの「凝視しているか」を取得する話をしたいと思います。
Contents
そもそもなぜ凝視しているかを取得したいと思ったか
前置きとしてこの話をしておきたいと思ったのですが、一言で済みました。
「ホラーゲームではどこ見てるか大事だから」
以上です。
方法1(失敗)Ray
まずは、ヘッドマウントディスプレイ(Cameraのeye)から、ながーいRayを発射して、遠くに置いてある「注視してほしいもの」との接触判定を取る ということを考えました。
「目線」って言うし、線状のRayで衝突させればいけるやろ、と思ってました。
最初にカッコ書きでも書きましたが、この方法は失敗でした。
原因はかんたんで、「長距離の判定では少しの角度差が致命的なのに、人々のヘッドマウントディスプレイのかぶり方は一定ではない」ということでした。
テストプレイでは、100メートル先の物体を3秒間見続けることは一度もできませんでした。
2つ目の方法を教えて頂く前に、「だんだん広がるRay」なるものも思いついて画策したんですが、「Rayそのものの座標を取ることはできない(=Rayの形を発射点との距離に比例した半径の円とすることはできない)」のでだめでした。
方法2(成功)ConeCollider
教えていただきました。
「Colliderがありますよ。」
…そもそも、Rayに拘る必要はなかったわけです。
こんなAssetがあります。
こいつをimportして、感知したいオブジェクトの下にEmptyを作って。
そのEmptyにこれをつけて、角度を調節して。
is Triggerにチェックを入れると、衝突した際のスクリプトをOnTriggerEnter,Stay,Exit内に記述できるようになります。
使う距離やシチュエーションにもよるとは思いますが、
だいたい中心角は「5度」ほどがよいと思います。
大変かとは思いますが、角度や長さは調整しながら行ってください。
おんなじAssetで、「手に持っている懐中電灯がどこを照らしているか」みたいなことを取得することもできます。
お試しあれ。
製作中のホラーゲームは、これで行こうと思います。
スポンサードリンク
ディスカッション
コメント一覧
まだ、コメントがありません