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

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 のときの内容です。

ポインターで指されたときの処理を追加

レーザーポインターで指されたときの処理を追加していくよ。Easy Input では、指される対象となるオブジェクトに Receiver 系のスクリプトを追加すると実現できるみたい。

タンスのオブジェクト(tumba_fur)に、インスペクターから「StandardPointerReceiver」スクリプトを追加してみよう。

ここでは、ポインターで指すとオブジェクトの色を変える Easy Input に含まれているスクリプトをそのまま使ってみよう。「ChangeColor」スクリプトも追加してみて!

StandardPointerReceiver と ChangeColor スクリプトを追加
Standard Pointer Receiver は、ポインターで指されていることを知るだけの一番シンプルな Receiver だね。On Hover/On Hover Enter/On Hover Exit ってあるように、指されている・指されるの開始・指されるの終了のタイミングで、何かしらの処理を実行できるようになっているね。

On Hover Enter と On Hover Exit の「+」ボタンをクリックして、タンスオブジェクトの Change Color スクリプト内の toggleColor を実行できるように設定してみて!

タンスオブジェクトに Collider を追加するのも忘れずに。

Hover Enter/Exit のタイミングで、Change Color スクリプトの toggleColor の実行
ここまでを実行してみると……うまく動いたかな?
タンスオブジェクトに Collider の追加と、レーザーポインターの Standard Laser Pointer で Collider Raycast のチェックをオン、Layers To Check を Everything にしておくのを忘れずにね。

ポインターでクリック!

次は、Standard Pointer Receiver の代わりに、「Standard Pointer Click Receiver」スクリプトに差し替えてみよう。こっちを使うと、ポインターで指されたときに、各種クリック動作の処理を実現できるね。

試しに、On Hover Click Start/On Hover Click End に ChangeColor の toggleColor を実行するように設定してみて。

StandardPointerClickReceiver スクリプトの追加と、On Hover Click Start/End のタイミングで ChangeColor の toggleColor を実行
「Click」は、Oculus Go のトリガーのアクションのようね。Touch サーフェスのクリック動作は、Easy Input の「Custom Touch Void Controller」や「Custom Touch Input Controller」スクリプトを同じように使うとできそう。Easy Input のサンプル Scene も参考になるわ。

ポインターでつかむ!

Standard Grab Receiver」スクリプトを使うとポインターでつかんでオブジェクトの移動も簡単にできるよ。
Standard Grab Receiver スクリプト
たくさんパラメーターがあるね~。

それぞれの意味は、こんな感じ?

  • Grab Condition: つかむボタン
  • Drop Condition: オブジェクトをはなすときの動作。自由落下、現在の速度または直近の速度の平均値を用いて投げる。
  • Throw sensitivity: 投げる動作を強く・弱くするための乗数
  • Block Movement: つかむときに一時的に移動をブロック
  • Movement Object: 移動をブロックするオブジェクト
  • Allow Click for Depth: Touch サーフェスの上下クリックでオブジェクトを近く・遠くに移動
  • Click Deadzone: 近く・遠くに移動させるときクリックに必要な Touch サーフェスの移動量
  • Click Sensitivity: オブジェクトの移動速度
  • Min Depth Distance: オブジェクトを近づけられる距離
  • Max Depth Distance: オブジェクトを遠ざけられる距離
  • Allow swipe for Rotation: Touch サーフェスのスワイプでオブジェクトを回転
  • Swipe X sensitivity: X軸の回転を速く・遅くする乗数
  • Swipe Y sensitivity: Y軸の回転を速く・遅くする乗数
  • Collisions Break Grab: Collider にぶつかるとつかむ動作を終わる
  • Lock X, Y or Z Position: X, Y, Z の位置を固定
  • Lock X, Y, or Z Rotation: X,Y, Z の回転を固定
  • Twist Mode: コントローラーの傾きでオブジェクトを回転
  • Twist sensitivity: 回転を速く・遅くする乗数
重力を有効するには、つかむオブジェクトに Rigidbody を追加。あと床あたりに Collider 設定した Cube とかを配置してみよう。
この「Pack Gesta Furniture #1」の Scene の場合は、タンスを動かすと影が残ってしまうわね。タンスのオブジェクトの Static チェックボックスをオフにして……

メニュー Windows – Rendering – Lighting Settings の「Generate Lighting」ボタンでライティングの事前計算をしなおしておくとよさそうね。



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

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