(この記事の使用環境: Unity5.5.0f3 Personal、Windows10、SteamVR Plugin 1.2.0、VRTK3.0.1)
(2017/2/19 すべてのリンク先が埋まったため、更新)


VR用アセット「VRTK」の Example 034_Controls_InteractingWithUnityUI の解説です。
VR空間でUnityのUI要素にインタラクトするデモです。
SnapCrab_NoName_2017-2-15_13-6-34_No-00

■公式サイトの解説

VRTK公式サイトでこのExampleの解説文及び解説動画を見ることができます。ただし、動画に関してはVRTK旧バージョンのときに作られたものであり、VRTK3.0(以降)では設定等が異なっている場合があることに留意してください。動きを中心に見てもらえれば良いかと思います。

このExampleの解説動画
(このExampleの公式解説動画はまだありません) 


■VRTKのセットアップ方法および使用されているスクリプトの解説

■Exampleの解説

VRTK/Examples 内にある当該番号のシーンを呼び出すことで、デモを動かしてみることができます。

このデモシーンはVR空間でのUI要素へのインタラクト方法を示しています。UI要素へのインタラクトには VRTK_UIPointer スクリプトを使用します。右のコントローラーでは VRTK_UIPointer と VRTK_SimplePointer でUIにインタラクトしています。左コントローラーでは、ヘッドセットにアタッチされたポインターをコントロールし、視線によってUIにインタラクトします。
SnapCrab_NoName_2017-2-15_13-6-34_No-00


以下、シーンに配置されているオブジェクトについての概要説明です。
  • RightController: [VRTK] ゲームオブジェクトの下に配置されている、右のコントローラー用のVRTKスクリプトをアタッチするゲームオブジェクト。
    VRTK_UIPointer 、VRTK_SimplePointer スクリプトほかがアタッチされており、UI要素をコントローラーからのポインタービームで指し示すことができる。
    SnapCrab_NoName_2017-2-15_13-40-41_No-00

  • LeftController:  [VRTK] ゲームオブジェクトの下に配置されている、左のコントローラー用のVRTKスクリプトをアタッチするゲームオブジェクト。
    VRTK_ControllerEvents スクリプトのみがアタッチされている。
    SnapCrab_NoName_2017-2-15_13-43-10_No-00

  • Headset:  [VRTK] ゲームオブジェクトの下に配置されているゲームオブジェクト。Headset オブジェクトにはシンプルな Follow スクリプトがアタッチされており、[CameraRig] の Camera (eye) の位置・回転を追従するようになっている。
    また、VRTK_SimplePointer と VRTK_UIPointer がアタッチされており、VRTK_SimplePointer のインスペクタでは Controller に LeftController が指定されている。これにより、左コントローラーのタッチパッドを押すことでヘッドセットからの視線ポインターが作動し、UIを指し示すことができる。
    SnapCrab_NoName_2017-2-15_13-45-39_No-00

  • Canvas: ボタン、トグルボックス、ドロップダウンリスト、スライダーなどが配置されているキャンバス。トップの Canvas に VRTK_UICanvas スクリプトがアタッチされており、各種 UI をポインタービームで操作することができる。
    SnapCrab_NoName_2017-2-15_13-55-33_No-00

  • IgnoreMeCanvas: ボタンとテキストが配置されているキャンバス。VRTK_UICanvas がアタッチされていないため、ポインタービームでインタラクトすることはできない。
    SnapCrab_NoName_2017-2-15_14-1-51_No-00

  • DragDropCanvas: 複数の正方形(DropZone)と「Drag Me」等のテキストなどが配置されているキャンバス。トップの Canvas に VRTK_UICanvas がアタッチされており、ポインタービームでインタラクトできる。
    SnapCrab_NoName_2017-2-15_14-11-14_No-00
    「Drag Me」「Drag Me On Here」「Drag Me Anywhere」の各テキストオブジェクトには VRTK_UIDraggableItem スクリプトがアタッチされており、ポインタービームでドラッグして位置を移動させることができる。各オブジェクトで VRTK_UIDraggableItem の設定が異なっており、ドラッグで移動できる先が異なる。
    「Drag Me On Here」は配置されているキャンバスの範囲内でドラッグ移動可、「Drag Me Anywhere」はシーン内の他のキャンバスにもドラッグ移動可、「Drag Me」は VRTK_UIDropZone スクリプトのアタッチされているオブジェクト(DropZone A~D および StatusPanel オブジェクト)の上にのみドラッグ移動可となっている。


  • WorldKeyboard: キーボード状にボタン群などが配置されているキャンバス。トップの Canvas に VRTK_UICanvas スクリプトがアタッチされており、各ボタンををポインタービームで操作することができる。
    各キーを押したときの処理は UI_Keyboard スクリプトに記述されている。
    SnapCrab_NoName_2017-2-15_14-27-31_No-00
    UI_Keyboard スクリプトの中身。
    namespace VRTK.Examples
    {
        using UnityEngine;
        using UnityEngine.UI;
    
        public class UI_Keyboard : MonoBehaviour
        {
            private InputField input;
    
            // --- クリックしたキーの文字をテキストに追加する ---------------
            public void ClickKey(string character)
            {
                input.text += character;
            }
    
            // --- BackSpaceキーが押されたら入力済みテキストの最後の1文字を削除する -----
            public void Backspace()
            {
                if (input.text.Length > 0)
                {
                    input.text = input.text.Substring(0, input.text.Length - 1);
                }
            }
    
            // --- Enterキーが押されたらコンソールに入力済みテキストを表示し、テキストをクリアする ---
            public void Enter()
            {
                Debug.Log("You've typed [" + input.text + "]");
                input.text = "";
            }
    
            // --- 初期化 -------------------------
            private void Start()
            {
                input = GetComponentInChildren<InputField>();
            }
        }
    }
    

今回は以上です。