Ejemplo n.º 1
0
    void Update()
    {
        //初期化失敗するなどoverlayが無効な場合は実行しない
        if (overlay == null || error)
        {
            return;
        }

        if (show)
        {
            //オーバーレイを表示する
            overlay.ShowOverlay(overlayHandle);
        }
        else
        {
            //オーバーレイを非表示にする
            overlay.HideOverlay(overlayHandle);
        }

        //イベントを処理する
        uint uncbVREvent = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(VREvent_t));

        while (overlay.PollNextOverlayEvent(overlayHandle, ref Event, uncbVREvent))
        {
            if (eventlog)
            {
                Debug.Log(Tag + "Event:" + ((EVREventType)Event.eventType).ToString());
            }
            //Debug.Log(Tag +"Event:"+ (Event.eventType).ToString());
            switch ((EVREventType)Event.eventType)
            {
            case EVREventType.VREvent_MouseMove:
                MouseX = Event.data.mouse.x;
                MouseY = Event.data.mouse.y;
                break;

            case EVREventType.VREvent_MouseButtonDown:
                MouseClick = true;
                break;

            case EVREventType.VREvent_MouseButtonUp:
                MouseClick = false;
                break;

            case EVREventType.VREvent_DashboardActivated:
                break;

            case EVREventType.VREvent_DashboardDeactivated:
                break;

            case EVREventType.VREvent_DashboardRequested:
                break;

            case EVREventType.VREvent_DashboardThumbSelected:
                break;

            case EVREventType.VREvent_EnterStandbyMode:
                break;

            case EVREventType.VREvent_LeaveStandbyMode:
                break;

            case EVREventType.VREvent_KeyboardCharInput:
                break;

            case EVREventType.VREvent_KeyboardClosed:
                break;

            case EVREventType.VREvent_KeyboardDone:
                break;

            case EVREventType.VREvent_ResetDashboard:
                break;

            case EVREventType.VREvent_ScreenshotTriggered:
                break;

            case EVREventType.VREvent_WirelessDisconnect:
                break;

            case EVREventType.VREvent_WirelessReconnect:
                break;

            case EVREventType.VREvent_Quit:
                Debug.Log(Tag + "Quit");
                ApplicationQuit();
                break;

            default:
                break;
            }
        }

        if (overlay.IsDashboardVisible())
        {
            //サムネイルにテクスチャを設定
            if (thumbnailAvailable)
            {
                var overlayError = EVROverlayError.None;
                overlayError = overlay.SetOverlayTexture(thumbnailHandle, ref thumbnailTexture);
                if (overlayError != EVROverlayError.None)
                {
                    Debug.LogError(Tag + "Overlayにサムネイルをセットできませんでした. " + overlayError.ToString());
                    error = true;
                    return;
                }
            }
        }

        //オーバーレイが表示されている時
        if (overlay.IsOverlayVisible(overlayHandle) && overlay.IsActiveDashboardOverlay(overlayHandle))
        {
            //オーバーレイの大きさ設定(幅のみ。高さはSetOverlayMouseScaleの比から自動計算される)
            overlay.SetOverlayWidthInMeters(overlayHandle, width);
            //オーバーレイの透明度を設定
            overlay.SetOverlayAlpha(overlayHandle, alpha);

            //RenderTextureが生成されているかチェック
            if (!renderTexture.IsCreated())
            {
                Debug.Log(Tag + "RenderTextureがまだ生成されていない");
                return;
            }

            try
            {
                //マウスカーソルスケールを設定する(これにより表示領域のサイズも決定される)
                vecMouseScale.v0 = renderTexture.width;
                vecMouseScale.v1 = renderTexture.height;
                overlay.SetOverlayMouseScale(overlayHandle, ref vecMouseScale);
                //RenderTextureからネイティブテクスチャのハンドルを取得
                overlayTexture.handle = renderTexture.GetNativeTexturePtr();
            }
            catch (UnassignedReferenceException e)
            {
                Debug.LogError(Tag + "RenderTextureがセットされていません " + e.ToString());
                error = true;
                return;
            }

            //オーバーレイにテクスチャを設定
            var overlayError = EVROverlayError.None;
            overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture);
            if (overlayError != EVROverlayError.None)
            {
                Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString());
                error = true;
                return;
            }
        }
    }