(この記事の使用環境: Unity5.5.0f3 Personal、Windows10、SteamVR Plugin 1.2.0、VRTK3.0.1)


今回はVR用アセット「VRTK」に収められているスクリプト「VRTK_InteractableObject」の概要を説明します。VR空間上でオブジェクトを掴んだり、使ったりできるようにするものです。

SnapCrab_NoName_2017-1-26_10-17-3_No-00

■公式サイトの解説

まずは公式サイトによる解説。これで用が足りる方は以下を読む必要はありません。
VRTK_InteractableObject · VRTK - Virtual Reality Toolkit

以下、公式サイトの解説をざっくりと直訳または意訳したもの+若干の補足です。誤り等があれば指摘してもらえると大変ありがたいです。また、イベントおよびメソッドについての解説は省略していますので、それらは公式サイトを参照願います。

■概要

補足部分以外はほぼ直訳。
  • VRTK_InteractableObject スクリプトは、(コントローラー等による)インタラクトが必要とされるゲームオブジェクトにアタッチされる。 
  • このスクリプトの基本はゲーム世界の「掴める」または「使える」オブジェクトを識別するシンプルなメカニズムを提供することであるが、よりリッチな機能性を持つスクリプトに継承されるベースとなることが期待されているものである。
    (※補足: 例えばVRTK Examples 014 等には「Gun」や「LightSaber」といったインタラクタブルなオブジェクトが登場しますが、これらには VRTK_InteractableObject を継承したスクリプト「Gun」・「LightSaber」がアタッチされています。のちほど説明します)
  • インタラクタブルオブジェクトをハイライトするのには、デフォルトでは VRTK_MaterialColorSwapHighlighter が使われる。もしほかのハイラーターがオブジェクトに適用されていない場合は。(※補足: 普通に使い始める分には特に気にしなくて大丈夫です。ハイライトする色はインスペクタから指定できます)
  • ※補足: オブジェクトを「掴む」・「使う」ためには、オブジェクトにこの VRTK_InteractableObject スクリプトをアタッチし適切な設定を行うほかに、コントローラー側に VRTK_InteractGrab スクリプト(掴む)あるいは VRTK_InteractUse スクリプト(使う)がアタッチされている必要があります。

■インスペクタのパラメータ

以下のような設定項目があります。(多い・・・)
  SnapCrab_NoName_2017-1-26_10-45-53_No-00
  • Disable When Idle: これがチェックされていれば、インタラクトされていないときは VRTK_InteractableObjectスクリプトが無効になる(※ デフォルトでチェックされている)。インタラクタブルオブジェクトがフレームごとに作り出す潜在的なコールを取り除く。
  • Touch Highlight Color: タッチされたときのハイライトするカラー。ここで設定されたカラーはほかで設定されたカラーを上書きする(たとえば VRTK_InteractTouch スクリプト で設定されたカラー)。
  • Allowed Touch Controllers: どっちのコントローラーでタッチを有効にするか。(※ デフォルトでは「Both」が選択されている。ほかの選択肢には「Left_Only」・「Right_Only」がある)
  • Is Grabbable: このオブジェクトを「掴める」か否かを定める。
  • Hold Button To Grab: これがチェックされていれば、オブジェクトを掴み続けるためにはコントローラーのGrabボタンを継続的に押し続ける必要がある。これがチェックされていなければ、Grabボタンはトグルアクションとなり、1回押せば掴み、もう1回押せば離すようになる。
  • Stay Grabbed On Teleport: オブジェクトを掴んだままテレポートできるか否かの設定。(※ テレポートには VRTK_BasicTeleport 等のスクリプトを使います)
  • Valid Drop: オブジェクトをドロップできるシチュエーションを定める。(※ デフォルト値は「Drop_Anywhere」。ほかの選択肢には「No_Drop」・「Drop_Valid Snap Drop Zone」がある)
  • Grab Override Button: (デフォルト値の) Undefined なら、掴む際に通常のGrabボタンが使われる。ここでほかのボタンをセットすると、特定のインタラクタブルオブジェクトを掴む際にはそのセットされたボタンが使われるようになる。
  • Allowed Grab Controllers: どっちのコントローラーで掴むアクションを有効にするか。(※ デフォルトでは「Both」が選択されている。ほかの選択肢には「Left_Only」・「Right_Only」がある)
  • Grab Attach Mechanic Script: オブジェクトを掴んだ時にコントローラーにどのようにアタッチされるかを定める。もし指定がなければ VRTK_FixedJointGrabAttach スクリプトが実行時に作られる。
  • Secondary Grab Action Script: このスクリプトは二度目の掴む試みにおけるセカンダリコントローラーアクションを利用するためのもの。指定されていなければ、最初のセカンダリコントローラーグラブアクションスクリプトが使用され、それが見つからなければ何も行われない。(※訳が分かりにくくてすみません。VRTK_Examplesではいずれのオブジェクトにも VRTK_SwapControllerGrabAction スクリプトがアタッチされているようで、この設定項目の有用な使い方は良く分かっていません)
  • Is Usable: このオブジェクトを「使える」か否かを定める。
  • Hold Button To Use: これがチェックされていれば、オブジェクトの使用し続けるためにはコントローラーのGrabボタンを継続的に押し続ける必要がある。これがチェックされていなければ、Useボタンはトグルアクションとなり、1回押せば使用開始し、もう1回押せば使用停止するようになる。
  • Use Only If Grabbed: 掴んでいるときだけ使用できるか否かを定める。
  • Pointer Activates Use Action: これがチェックされていると、コントローラーからのポインタービームがヒットしたときにUseアクションが実行される。
    もしオブジェクトの Hold Button To Use がチェックされていない状態ならば、ポインターはトグルアクションとなる。望んでいないテレポートが発生することを避けるため、もしこの項目がチェックされているインタラクタブルオブジェクトに影響しているなら、ワールドポインターは Destination Set イベントをスローしない。
  • Use Override Button: (デフォルト値の) Undefined なら、掴む際に通常のUseボタンが使われる。ここでほかのボタンをセットすると、特定のインタラクタブルオブジェクトを使う際にはそのセットされたボタンが使われるようになる。
  • Allowed Use Controllers: どっちのコントローラーで使うアクションを有効にするか。(※ デフォルトでは「Both」が選択されている。ほかの選択肢には「Left_Only」・「Right_Only」がある)

■関連するExamples

関連するExamplesについての解説記事です。

■VRTKのセットアップ方法および関連スクリプトの解説

VRTKのセットアップ方法および関連するスクリプトについての解説記事です。

今回は以上です。