void Update() { //初期化失敗するなどoverlayが無効な場合は実行しない if (overlay == null) { return; } //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle)) { //HMD視点位置変換行列に書き込む。 //ここでは回転なし、平行移動ありのHUD的な状態にしている。 //回転行列を元に、HMDからの相対的な位置にオーバーレイを表示する。 //代わりにSetOverlayTransformAbsoluteを使用すると、ルーム空間に固定することができる uint indexunTrackedDevice = 0; //0=HMD(他にControllerやTrackerにすることもできる) //overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, indexunTrackedDevice, ref pose); overlay.SetOverlayTransformAbsolute(overlayHandle, ETrackingUniverseOrigin.TrackingUniverseSeated, ref pose); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません"); ApplicationQuit(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); ApplicationQuit(); return; } } }
//-------------------------------------------------------------------------- //Overlayが表示されているかどうか外部からcheck public bool IsVisible() { return(overlay.IsOverlayVisible(overlayHandle) && !IsError()); }
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; } } }
void Update() { //初期化失敗するなどoverlayが無効な場合は実行しない if (overlay == null) { return; } //オーバーレイを表示する overlay.ShowOverlay(overlayHandle); //オーバーレイを非表示にする //overlay.HideOverlay(overlayHandle); //オーバーレイが表示されている時 if (overlay.IsOverlayVisible(overlayHandle)) { var offset = new SteamVR_Utils.RigidTransform(); if (RenderTarget != null) { offset.pos = new Vector3(RenderTarget.position.x, RenderTarget.position.y, RenderTarget.position.z); offset.rot = RenderTarget.rotation; } else { offset.pos = new Vector3(0, 0, 0); offset.rot = Quaternion.Euler(0, 0, 0); } var t = offset.ToHmdMatrix34(); t.m5 = -1; overlay.SetOverlayTransformAbsolute(overlayHandle, SteamVR_Render.instance.trackingSpace, ref t); //RenderTextureが生成されているかチェック if (!renderTexture.IsCreated()) { Debug.Log(Tag + "RenderTextureがまだ生成されていない"); return; } //RenderTextureからネイティブテクスチャのハンドルを取得 try { overlayTexture.handle = renderTexture.GetNativeTexturePtr(); } catch (UnassignedReferenceException e) { Debug.LogError(Tag + "RenderTextureがセットされていません"); ApplicationQuit(); return; } //オーバーレイにテクスチャを設定 var overlayError = EVROverlayError.None; overlayError = overlay.SetOverlayTexture(overlayHandle, ref overlayTexture); if (overlayError != EVROverlayError.None) { Debug.LogError(Tag + "Overlayにテクスチャをセットできませんでした. " + overlayError.ToString()); ApplicationQuit(); return; } } }