1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnityでQuest向け開発 rayでinteractするとイベントが発生する方法

Posted at

目標

exp_RayInteractCube.gif

これを最速で実現しましょう。
読めばすぐ分かるんですけど、意外とここまでの解説が存在せず2時間ぐらいかかったのでまとめる。

前提

  • rayつきコントローラーが表示されている
  • コントローラーで動くことができる
    が条件です。
    稚拙ですが過去にまとめた記事がありますので、ここが実装できてない場合は先にこちらを。
    https://qiita.com/yoshimatsu_taishi/items/42bbccd6b5337ba4c8fc

環境

  • Unity 2021.3.29
  • Meta XR Core SDK 68.0.3
    Quest向けに開発するSDK
  • Meta XR Simulator 68.0.2
    UnityのGame上でVRの動きを確認できるシミュレーター
  • Meta XR Interaction SDK 68.0.0
    インタラクト系のSDK
  • 実機:MetaQuest3

手法

Building Blockからゲームオブジェクトを置く

・Meta > Tools > Building Blocksを開きます。
Ray InteractionをHierarchyにドラッグアンドドロップします。
これで8割完成です。Building Blocksシステム考えた人ほんとうに𝑮𝑶𝑶𝑫です
(宗教上の理由で表現を変えました)
image.png

するとinteractするようのモデルがシーンに現れます。
Hierarchy上では"[BuildingBlock]Ray Interaction"というゲームオブジェクト名です。
(レンダーパイプラインの関係でマテリアルエラーを起こしていますが本編と関係ないので許容)
image.png

ちょこっとコライダーに関して解説を挟みます。

・"[BuildingBlock] Ray Interaction"に追加されているRayInteractableコンポーネントがその名の通り、rayでinteractすることを可能にする機能です。
・Surface項目に子の"Collider"というゲームオブジェクトがアタッチされていますね。
image.png

・"Collider"ゲームオブジェクトにアタッチされているコンポーネントを確認してみると、
Unityで元々用意されているBoxColliderと、Quest向け開発用のCollider Surfaceというコンポーネントがアタッチされています。
image.png
公式マニュアルにあるように、これを使うことでray interactの接触を判断しているみたいですね。
https://developers.meta.com/horizon/documentation/unity/unity-isdk-surfaces/?locale=ja_JP
引用:

サーフェスコンポーネントは、3D空間内の幾何学的サーフェスを表示します。これは、Unityの物理演算に依存しない、インタラクターの衝突面として動作します。RayInteractableとPokeInteractableはどちらも、ポインターのドラッグオーバーシュートとタッチ制限(ボタンなどのオブジェクトをポークしたときに指が止まるポイント)を処理するためにサーフェスコンポーネントを使用します。

ColliderSurfaceは、メッシュコライダーなどのコライダーとのインタラクションに使用されます。

eventを設定する

・先ほど追加した [BuildingBlock] Ray Interactionに、
Interactable Unity Event Wrapperコンポーネントをアタッチします。
このスクリプトを使うことで、イベントの内容とトリガーを設定できる(と僕は思っている)
公式の解説はこちら
https://developers.meta.com/horizon/reference/unity/v69/class_oculus_interaction_interactable_unity_event_wrapper?locale=ja_JP

・試しに[BuildingBlock] Ray Interactionにinteractしたら同じシーン内に存在しているSphereが消えるようにイベントを設定してみました。
・詳しくは下記の画像参照
image.png

完成

exp_RayInteractCube.gif

これでinteractする方法がわかったので、あとは各々のシーンに合わせて、interact後の挙動をスクリプトなどで作ればいいっていうことですね。やったね!

参考

こわくない Meta Quest 開発
Interaction SDKのサンプルシーン解説でお世話になりました
https://qiita.com/shogo0x2e/items/9ed38c3004cf374d0070

Interactable Unity Event Wrapperをつければいいんや!って気づかせてくれた解説
https://zenn.dev/mzn_yuina/scraps/89d67dfcc53dfb

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?