[Unity] Easy Input で Oculus Go アプリにレーザーポインター機能を簡単追加 3

Development,Pronama-chanEasy Input,Oculus Go,Unity

前回前々回 に続いて、Oculus Go と Gear VR のコントローラーで、レーザーポインターとかのよくある操作を簡単に実現できる Unity アセット「Easy Input for Gear VR and Oculus Go」を使ってみるよ。今回は、曲がったレーザーポインターとプレイヤーの移動だよ。

※ Easy Input for Gear VR and Oculus Go バージョン 1.2、Pack Gesta Furniture #1 バージョン 1.1、Unity バージョン 2018.2.6f1 のときの内容です。

ポインターで移動!

移動するときの UI で、よくある曲線で移動位置を指定するポインターを実現するには「Standard Curved Laser Pointer」スクリプトをコントローラーのオブジェクトに追加しよう。

普通のレーザーポインターの設定 のときと同じく、Laser Material にレーザーとなる LineRenderer の Material を設定、Laser Start ColorLaser End Color は、レーザーの開始点~終了点の色を設定。Reticle は、照準となるオブジェクト、Reticle Color は照準の色だね。Reticle には、前回まで使っていた Sphere オブジェクトを設定してみるよ。

それから、Collider Raycast のチェックをオン、Layers To Check を Everything にすれば、ポインターで Collider のあるオブジェクトを指すことができるようになるね。

曲がったレーザーも簡単ね!!
続いて、ポインターで指した地点に移動できるようにするには「Standard Teleport Receiver」スクリプトを使うよ。Cube オブジェクトを追加して、床の部分を覆うような大きさにして、Box Collider を追加しよう……というか、これは 前回 のポインターでオブジェクトをつかんで移動させるとき重力を反映できるようにした人は、既に追加済みだね。

そして、Cube オブジェクトに「Standard Teleport Receiver」スクリプトを追加。

Standard Teleport Receiver の設定
Teleport Condition は、移動するときのボタンを選べて、Teleport Object は、移動させるオブジェクト、つまりここではプレイヤーとなる Capsule オブジェクトだね。ポインターの指す地点は、地面の高さになっちゃうから、Y Axis Offset で、移動オブジェクトにY軸のオフセットを足すと、移動している感じになるよ。

以上で、カーブを描くレーザーポインターで、部屋の中を移動できるようになったはず……!

うまく動いたかな?

Standard Teleport Receiver のパラメーター、Time Lockout は、移動した後、次のクリックを受け付ける最短の秒数だよ。

それから、Teleport Mode を「Show Laser On Condition Start」にすると、移動ボタンを押したときだけレーザーを表示する UI にできるよ。このモードのときは、Laser に表示するレーザーオブジェクトを指定しよう。今回の例では、Pointer スクリプトを含む TrackedRemote オブジェクトを Laser に指定すればいいってことだね。

あと、Standard Teleport Receiver を、Terrain に追加すれば、Gaia で造った地形も VR 空間で移動できるようになるね。移動できるって楽しい!

レーザーのカーブが少しカクカクしてない?
Standard Curved Laser Pointer のパラメーターで調整できるよ。

  • Segments Count: 曲がったレーザーを構成する線の数
  • Segment Length: ひとつの線の長さ
  • Segment Curve Degrees: 線と線との角度

線の数を増やして、ひとつの線の長さを短く、角度を浅くすると、きれいなカーブになるね。

Segment パラメーターの変更
いい感じ!💛

一区切り?

ここまでで、レーザーポインターに関する基本的なところは試せた感じかな? とりあえず、一区切りってことで。

でも、試してない機能として、ボタンとか Unity の GUI をポインターで選択したりする機能はまだだし……、コントローラーの Touch サーフェスのスワイプとか、コントローラーの傾きによる入力もまだかな。

Easy Input のデモ Scene には、まだまだいろいろな機能のサンプルがあるわね。実現したい機能をサンプルから探して、使われている Easy Input のスクリプトを調べていくと、他の機能も簡単に使えそうね。
あと、Easy Input で実現できなさそうなことも、Easy Input のスクリプトを参考にすれば、役立つことも結構多そうだね。

左手

ちょっと待って! これまでの内容、コントローラーの利き手設定を左手にしたときに対応してなくない!? コントローラーが表示されないわね。
TrackedRemote オブジェクトの「OVR Tracked Remote」スクリプトにある Controller が「R Tracked Remote」になってるからね。「L Tracked Remote」が左手用。

OVRTrackedRemote スクリプトを直接編集して、OVRInput.GetActiveController() で実行中にコントローラーの種類を設定するようにすれば解決かな。


void Update()
{
bool controllerConnected = OVRInput.IsControllerConnected(m_controller);
if ((controllerConnected != m_prevControllerConnected) || !m_prevControllerConnectedCached)
{
// (追加した行)
m_controller = OVRInput.GetActiveController();
m_modelOculusGoController.SetActive(controllerConnected && m_isOculusGo);
m_modelGearVrController.SetActive(controllerConnected && !m_isOculusGo);
m_prevControllerConnected = controllerConnected;
m_prevControllerConnectedCached = true;
}
if (!controllerConnected)
{
return;
}
}


※ 公式のドキュメント等を参考に一ユーザーとして書いた記事です。詳細は、公式のドキュメントを確認してください。

The following two tabs change content below.
都内の公立高校に通う高校生。部活は、情報処理研究会。身体を動かすのも好きで、気が向いたときはなぜか体育会系の部活に混ぜてもらっていろんなスポーツをすることも。プログラミング生放送のキャラクターとして活動中!