{"id":66912,"date":"2024-06-16T17:38:00","date_gmt":"2024-06-16T14:08:00","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/"},"modified":"2024-06-16T17:38:00","modified_gmt":"2024-06-16T14:08:00","slug":"part-6-follow-device-3jfb","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/","title":{"rendered":"\u0628\u062e\u0634 6 &#8211; \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang <\/p>\n<p>  HMD \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u067e\u0648\u0634\u0634 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 HMD<\/p>\n<p>  \u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u0637\u0644\u0642\u06cc \u06a9\u0647 \u062f\u0631 \u0642\u0633\u0645\u062a \u0642\u0628\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u06cc\u0645 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>    SetOverlaySize(overlayHandle, 0.5f);<\/p>\n<p>&#8211;   var position = new Vector3(0, 2, 3);<br \/>\n&#8211;   var rotation = Quaternion.Euler(0, 0, 45);<br \/>\n&#8211;   SetOverlayTransformAbsolute(overlayHandle, position, rotation);<\/p>\n<p>    ShowOverlay(overlayHandle);<\/p>\n<p>    &#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0634\u0627\u062e\u0635 \u062f\u0633\u062a\u06af\u0627\u0647<\/p>\n<p>\u062f\u0631 SteamVR\u060c \u062f\u0633\u062a\u06af\u0627\u0647 \u0647\u0627\u06cc \u0645\u062a\u0635\u0644 \u0628\u0627 Device Index \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u062a\u062e\u0635\u06cc\u0635 \u0645\u06cc \u06cc\u0627\u0628\u062f\u060c \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0645\u06cc \u0634\u0648\u0646\u062f.  (\u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a\u060c \u0648\u06cc\u06a9\u06cc \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f)\u0628\u0631\u0627\u06cc HMD\u060c \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 OpenVR.k_unTrackedDeviceIndex_Hmd \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0647\u0645\u06cc\u0634\u0647 0 \u0627\u0633\u062a.<\/p>\n<p>  \u0645\u0648\u0642\u0639\u06cc\u062a \u0648 \u0686\u0631\u062e\u0634 \u0631\u0627 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u067e\u0648\u0634\u0634 \u0631\u0627 \u062f\u0631 2 \u0645\u062a\u0631 \u062c\u0644\u0648\u062a\u0631 (\u0645\u062d\u0648\u0631 Z) HMD \u0646\u0645\u0627\u06cc\u0634 \u062f\u0647\u06cc\u0645.  \u0645\u0627\u0646\u0646\u062f \u0642\u0633\u0645\u062a \u0642\u0628\u0644 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f position \u0648 rotation \u0645\u062a\u063a\u06cc\u0631\u0647\u0627<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>+   var position = new Vector3(0, 0, 2);<br \/>\n+   var rotation = Quaternion.Euler(0, 0, 0);<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>    SetOverlaySize(overlayHandle, 0.5f);<br \/>\n    ShowOverlay(overlayHandle);<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0645\u0648\u0642\u0639\u06cc\u062a \u0646\u0633\u0628\u06cc \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 HMD \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0627\u0632 SetOverlayTransformTrackedDeviceRelative() \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u0648\u0642\u0639\u06cc\u062a \u0646\u0633\u0628\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 HMD \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.  (\u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a\u060c \u0648\u06cc\u06a9\u06cc \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f)<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>    var position = new Vector3(0, 0, 2);<br \/>\n    var rotation = Quaternion.Euler(0, 0, 0);<br \/>\n    var rigidTransform = new SteamVR_Utils.RigidTransform(position, rotation);<br \/>\n    var matrix = rigidTransform.ToHmdMatrix34();<br \/>\n+   var error = OpenVR.Overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, ref matrix);<br \/>\n+   if (error != EVROverlayError.None)<br \/>\n+   {<br \/>\n+       throw new Exception(&#8220;Failed to set overlay position: &#8221; + error);<br \/>\n+   }<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>    SetOverlaySize(overlayHandle, 0.5f);<br \/>\n    ShowOverlay(overlayHandle);<br \/>\n} <\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646\u062f\u06a9\u0633 \u062f\u0633\u062a\u06af\u0627\u0647 HMD \u0631\u0627 \u067e\u0627\u0633 \u06a9\u0646\u06cc\u062f (OpenVR.k_unTrackedDeviceIndex_Hmd) \u0648 \u0645\u0627\u062a\u0631\u06cc\u0633 \u062a\u0628\u062f\u06cc\u0644.\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u067e\u0648\u0634\u0634 2 \u0645\u062a\u0631 \u062c\u0644\u0648\u062a\u0631 \u0627\u0632 HMD \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>  \u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u06a9\u062f<\/p>\n<p>\u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0646\u0633\u0628\u06cc \u0631\u0627 \u0628\u0647 \u062f\u0627\u062e\u0644 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0646\u06cc\u062f SetOverlayTransformRelative().<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>    var position = new Vector3(0, 0, 2);<br \/>\n    var rotation = Quaternion.Euler(0, 0, 0);<br \/>\n&#8211;   var rigidTransform = new SteamVR_Utils.RigidTransform(position, rotation);<br \/>\n&#8211;   var matrix = rigidTransform.ToHmdMatrix34();<br \/>\n&#8211;   var error = OpenVR.Overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, ref matrix);<br \/>\n&#8211;   if (error != EVROverlayError.None)<br \/>\n&#8211;   {<br \/>\n&#8211;       throw new Exception(&#8220;Failed to set overlay position: &#8221; + error);<br \/>\n&#8211;   }<br \/>\n+   SetOverlayTransformRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, position, rotation);<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>    SetOverlaySize(overlayHandle, 0.5f);<br \/>\n    ShowOverlay(overlayHandle);<br \/>\n} <\/p>\n<p>&#8230;<\/p>\n<p>+ \/\/ Pass deviceIndex as argument.<br \/>\n+ private void SetOverlayTransformRelative(ulong handle, uint deviceIndex, Vector3 position, Quaternion rotation)<br \/>\n+ {<br \/>\n+     var rigidTransform = new SteamVR_Utils.RigidTransform(position, rotation);<br \/>\n+     var matrix = rigidTransform.ToHmdMatrix34();<br \/>\n+     var error = OpenVR.Overlay.SetOverlayTransformTrackedDeviceRelative(handle, deviceIndex, ref matrix);<br \/>\n+     if (error != EVROverlayError.None)<br \/>\n+     {<br \/>\n+         throw new Exception(&#8220;Failed to set overlay position: &#8221; + error);<br \/>\n+     }<br \/>\n+ }<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u067e\u0648\u0634\u0634 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u062a\u0631\u0644\u0631<\/p>\n<p>\u0627\u0632 \u0646\u0645\u0627\u06cc\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0647 \u062c\u0627\u06cc HMD \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0627\u0632 \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644\u0631 \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0646\u062f.<\/p>\n<p>  \u0646\u0645\u0627\u06cc\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0641\u0647\u0631\u0633\u062a \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0633\u0645\u062a \u0686\u067e \u0631\u0627 \u0628\u0627 GetTrackedDeviceIndexForControllerRole() \u0627\u0632 OpenVR.System.<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>    var position = new Vector3(0, 0, 2);<br \/>\n    var rotation = Quaternion.Euler(0, 0, 0);<br \/>\n+   var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n    SetOverlayTransformRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, position, rotation);<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>    SetOverlaySize(overlayHandle, 0.5f);<br \/>\n    ShowOverlay(overlayHandle);<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u0627\u06cc\u0646 \u0627\u0633\u062a:\u06a9\u0646\u062a\u0631\u0644\u0631 \u0686\u067e: EtrackedControllerRole.LeftHand\u06a9\u0646\u062a\u0631\u0644\u0631 \u0633\u0645\u062a \u0631\u0627\u0633\u062a: EtrackedControllerRole.RightHand<\/p>\n<p>\u0627\u06af\u0631 \u0646\u062a\u0648\u0627\u0646\u0633\u062a \u0646\u0645\u0627\u06cc\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u062f\u060c \u0645\u062b\u0644 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0642\u0637\u0639 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c GetTrackedDeviceIndexForControllerRole() \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f k_unTrackedDeviceIndexInvalid.<\/p>\n<p>  \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0645\u0627 \u0646\u0645\u0627\u06cc\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0686\u067e \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0633\u067e\u0633 \u0631\u0648\u06a9\u0634 \u0631\u0627 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u0645.  \u0627\u06cc\u0646\u062f\u06a9\u0633 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u0628\u0647 SetOverlayTransformRelative() \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0628\u0631\u0627\u06cc HMD \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u0645.<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>    var position = new Vector3(0, 0, 2);<br \/>\n    var rotation = Quaternion.Euler(0, 0, 0);<br \/>\n    var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n&#8211;   SetOverlayTransformRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, position, rotation);<br \/>\n+   if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)<br \/>\n+   {<br \/>\n+       SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<br \/>\n+   }<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>    SetOverlaySize(overlayHandle, 0.5f);<\/p>\n<p>    ShowOverlay(overlayHandle);<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0633\u0645\u062a \u0686\u067e \u0628\u0647 \u067e\u0646\u062c\u0631\u0647 SteamVR \u0645\u062a\u0635\u0644 \u0627\u0633\u062a\u060c \u0633\u067e\u0633 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0631\u0648\u06a9\u0634 \u0628\u0627\u06cc\u062f \u0628\u0647 \u062c\u0627\u06cc HMD \u0627\u0632 \u06a9\u0646\u062a\u0631\u0644\u0631 \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0646\u062f.<\/p>\n<p>  \u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0633\u0627\u0639\u062a\u060c \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648\u06a9\u0634 \u0631\u0648\u06cc \u0645\u0686 \u062f\u0633\u062a \u0686\u067e \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645.  \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062f\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 Unity \u0642\u0627\u0628\u0644 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0639\u0636\u0648<\/p>\n<p>\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0627\u0646\u062f\u0627\u0632\u0647\u060c \u0645\u0648\u0642\u0639\u06cc\u062a \u0648 \u0686\u0631\u062e\u0634 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0639\u0636\u0627\u06cc \u06a9\u0644\u0627\u0633 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.  \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc Range() \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0644\u063a\u0632\u0646\u062f\u0647 \u062f\u0631 \u0628\u0627\u0632\u0631\u0633 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>public class WatchOverlay : MonoBehaviour<br \/>\n{<br \/>\n    private ulong overlayHandle = OpenVR.k_ulOverlayHandleInvalid;<\/p>\n<p>+   [Range(0, 0.5f)] public float size = 0.5f;<br \/>\n+   [Range(-0.2f, 0.2f)] public float x;<br \/>\n+   [Range(-0.2f, 0.2f)] public float y;<br \/>\n+   [Range(-0.2f, 0.2f)] public float z;<br \/>\n+   [Range(0, 360)] public int rotationX;<br \/>\n+   [Range(0, 360)] public int rotationY;<br \/>\n+   [Range(0, 360)] public int rotationZ;<\/p>\n<p>    &#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0644\u063a\u0632\u0646\u062f\u0647 \u0647\u0627 \u0631\u0648\u06cc \u0628\u0627\u0632\u0631\u0633 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f.<\/p>\n<p>  \u0645\u062a\u063a\u06cc\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631 \u06a9\u062f \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u06a9\u062f \u0631\u0627 \u0628\u0627 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0639\u0636\u0648 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>&#8211;   var position = new Vector3(0, 0, 2);<br \/>\n&#8211;   var rotation = Quaternion.Euler(0, 0, 0);<br \/>\n+   var position = new Vector3(x, y, z);<br \/>\n+   var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);<br \/>\n    var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n    if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)<br \/>\n    {<br \/>\n        SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<br \/>\n    }<\/p>\n<p>    SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>&#8211;   SetOverlaySize(overlayHandle, 0.5f);<br \/>\n+   SetOverlaySize(overlayHandle, size);<br \/>\n    ShowOverlay(overlayHandle);<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062f\u0631 Update() \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0628\u0627 \u0627\u0641\u0632\u0648\u062f\u0646 \u06a9\u062f \u0628\u0647 \u0622\u0646 \u0642\u0627\u0628\u0644 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f Update().  \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u06a9\u062f \u0628\u0639\u062f\u0627 \u062d\u0630\u0641 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.  \u0628\u0631\u0627\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0648 \u0686\u0631\u062e\u0634 \u0645\u0648\u0642\u062a\u06cc \u0627\u0633\u062a.<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>    var position = new Vector3(x, y, z);<br \/>\n    var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);<br \/>\n    var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n    if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)<br \/>\n    {<br \/>\n        SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<br \/>\n    }<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>    SetOverlaySize(overlayHandle, size);<br \/>\n    ShowOverlay(overlayHandle);<br \/>\n}<\/p>\n<p>+ private void Update()<br \/>\n+ {<br \/>\n+     SetOverlaySize(overlayHandle, size);<br \/>\n+<br \/>\n+     var position = new Vector3(x, y, z);<br \/>\n+     var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);<br \/>\n+     var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n+     if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)<br \/>\n+     {<br \/>\n+         SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<br \/>\n+     }<br \/>\n+ }<\/p>\n<p>&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.  \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0646\u0648\u0627\u0631 \u0644\u063a\u0632\u0646\u062f\u0647 \u0628\u0627\u0632\u0631\u0633 \u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u067e\u0648\u0634\u0634 \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>  \u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0644\u063a\u0632\u0646\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648\u06a9\u0634 \u0631\u0648\u06cc \u0645\u0686 \u062f\u0633\u062a \u0686\u067e \u062d\u0631\u06a9\u062a \u062f\u0647\u06cc\u062f.  \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0627\u0633\u0644\u0627\u06cc\u062f\u0631\u0647\u0627 \u0631\u0627 \u0627\u0632 \u067e\u0646\u062c\u0631\u0647 \u062f\u0633\u06a9\u062a\u0627\u067e \u06a9\u0647 \u062f\u0631 \u062f\u0627\u0634\u0628\u0648\u0631\u062f SteamVR \u0628\u0627\u0632 \u0645\u06cc \u0634\u0648\u062f \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 Unity \u0631\u0627 \u0627\u0632 \u062f\u0627\u0634\u0628\u0648\u0631\u062f SteamVR \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0631\u0627\u0647 \u062f\u06cc\u06af\u0631 \u0646\u06af\u0627\u0647 \u06a9\u0631\u062f\u0646 \u0628\u0647 \u0646\u0645\u0627\u06cc HMD \u0631\u0648\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e \u0648 \u062a\u0646\u0638\u06cc\u0645 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u06af\u0631 \u0646\u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f HMD \u0631\u0627 \u0628\u067e\u0648\u0634\u06cc\u062f \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>size = 0.08<br \/>\nx = -0.044<br \/>\ny = 0.015<br \/>\nz = -0.131<br \/>\nrotationX = 154<br \/>\nrotationY = 262<br \/>\nrotationZ = 0<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u060c \u0631\u0648\u06cc \u0646\u0627\u0645 \u0645\u0624\u0644\u0641\u0647 WatchOverlay \u06a9\u0644\u06cc\u06a9 \u0631\u0627\u0633\u062a \u06a9\u0631\u062f\u0647 \u0648 Copy Component \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u06cc\u062f\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u06cc \u0645\u0624\u0644\u0641\u0647 WatchOverlay \u06a9\u0644\u06cc\u06a9 \u0631\u0627\u0633\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0645\u0642\u0627\u062f\u06cc\u0631 \u06a9\u067e\u06cc \u0634\u062f\u0647 \u0631\u0627 \u0628\u0627 Paste Component Value \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.  \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0631\u0648\u06a9\u0634 \u0631\u0648\u06cc \u0645\u0686 \u062f\u0633\u062a \u0686\u067e \u0628\u0627\u0634\u062f.<\/p>\n<p>  \u062d\u0630\u0641 \u06a9\u062f \u0645\u0648\u0642\u062a<\/p>\n<p>\u06a9\u062f \u0631\u0627 \u0627\u0632 \u0642\u0633\u0645\u062a \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f Update().<\/p>\n<p>private void Update()<br \/>\n{<br \/>\n&#8211;   SetOverlaySize(overlayHandle, size);<br \/>\n&#8211;<br \/>\n&#8211;   var position = new Vector3(x, y, z);<br \/>\n&#8211;   var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);<br \/>\n&#8211;   var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n&#8211;   if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)<br \/>\n&#8211;   {<br \/>\n&#8211;       SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<br \/>\n&#8211;   }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0645\u062a\u0635\u0644 \u0646\u06cc\u0633\u062a<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631\u060c \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0627\u06cc\u062f \u0647\u0646\u06af\u0627\u0645 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062a\u0635\u0644 \u0628\u0627\u0634\u062f\u060c \u0632\u06cc\u0631\u0627 \u0645\u0627 \u0634\u0627\u062e\u0635 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645 Start().\u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u062f \u0641\u0647\u0631\u0633\u062a \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0627 \u0627\u0632 Start() to Update() \u0628\u0631\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u062f\u0631 \u0648\u0633\u0637 \u0648\u0635\u0644 \u06cc\u0627 \u0642\u0637\u0639 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>private void Start()<br \/>\n{<br \/>\n    InitOpenVR();<br \/>\n    OverlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>&#8211;   var position = new Vector3(x, y, z);<br \/>\n&#8211;   var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);<br \/>\n&#8211;   var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n&#8211;   if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)<br \/>\n&#8211;   {<br \/>\n&#8211;       SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<br \/>\n&#8211;   }<\/p>\n<p>    var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n    SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>    SetOverlaySize(overlayHandle, size);<\/p>\n<p>    ShowOverlay(overlayHandle);<br \/>\n}<\/p>\n<p>+ private void Update()<br \/>\n+ {<br \/>\n+     var position = new Vector3(x, y, z);<br \/>\n+     var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);<br \/>\n+     var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n+     if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)<br \/>\n+     {<br \/>\n+         SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<br \/>\n+     }<br \/>\n+ }<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062d\u0627\u0644\u0627 \u062d\u062a\u06cc \u0627\u06af\u0631 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0627\u0632 \u0648\u0633\u0637 \u0648\u0635\u0644 \u0628\u0627\u0634\u062f \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>  \u06a9\u062f \u0646\u0647\u0627\u06cc\u06cc<\/p>\n<p>using UnityEngine;<br \/>\nusing Valve.VR;<br \/>\nusing System;<\/p>\n<p>public class WatchOverlay : MonoBehaviour<br \/>\n{<br \/>\n    private ulong overlayHandle = OpenVR.k_ulOverlayHandleInvalid;<\/p>\n<p>    [Range(0, 0.5f)] public float size;<br \/>\n    [Range(-0.2f, 0.2f)] public float x;<br \/>\n    [Range(-0.2f, 0.2f)] public float y;<br \/>\n    [Range(-0.2f, 0.2f)] public float z;<br \/>\n    [Range(0, 360)] public int rotationX;<br \/>\n    [Range(0, 360)] public int rotationY;<br \/>\n    [Range(0, 360)] public int rotationZ;<\/p>\n<p>    private void Start()<br \/>\n    {<br \/>\n        InitOpenVR();<br \/>\n        overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;);<\/p>\n<p>        var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;;<br \/>\n        SetOverlayFromFile(overlayHandle, filePath);<\/p>\n<p>        SetOverlaySize(overlayHandle, size);<br \/>\n        ShowOverlay(overlayHandle);<br \/>\n    }<\/p>\n<p>    private void Update()<br \/>\n    {<br \/>\n        var position = new Vector3(x, y, z);<br \/>\n        var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);<br \/>\n        var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);<br \/>\n        if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)<br \/>\n        {<br \/>\n            SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    private void OnApplicationQuit()<br \/>\n    {<br \/>\n        DestroyOverlay(overlayHandle);<br \/>\n    }<\/p>\n<p>    private void OnDestroy()<br \/>\n    {<br \/>\n        ShutdownOpenVR();<br \/>\n    }<\/p>\n<p>    private void InitOpenVR()<br \/>\n    {<br \/>\n        if (OpenVR.System != null) return;<\/p>\n<p>        var error = EVRInitError.None;<br \/>\n        OpenVR.Init(ref error, EVRApplicationType.VRApplication_Overlay);<br \/>\n        if (error != EVRInitError.None)<br \/>\n        {<br \/>\n            throw new Exception(&#8220;Failed to initialize OpenVR: &#8221; + error);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    private void ShutdownOpenVR()<br \/>\n    {<br \/>\n        if (OpenVR.System != null)<br \/>\n        {<br \/>\n            OpenVR.Shutdown();<br \/>\n        }<br \/>\n    }<\/p>\n<p>    private ulong CreateOverlay(string key, string name)<br \/>\n    {<br \/>\n        var handle = OpenVR.k_ulOverlayHandleInvalid;<br \/>\n        var error = OpenVR.Overlay.CreateOverlay(key, name, ref handle);<br \/>\n        if (error != EVROverlayError.None)<br \/>\n        {<br \/>\n            throw new Exception(&#8220;Failed to create overlay: &#8221; + error);<br \/>\n        }<\/p>\n<p>        return handle;<br \/>\n    }<\/p>\n<p>    private void DestroyOverlay(ulong handle)<br \/>\n    {<br \/>\n        if (handle != OpenVR.k_ulOverlayHandleInvalid)<br \/>\n        {<br \/>\n            var error = OpenVR.Overlay.DestroyOverlay(handle);<br \/>\n            if (error != EVROverlayError.None)<br \/>\n            {<br \/>\n                throw new Exception(&#8220;Failed to dispose overlay: &#8221; + error);<br \/>\n            }<br \/>\n        }<br \/>\n    }<\/p>\n<p>    private void SetOverlayFromFile(ulong handle, string path)<br \/>\n    {<br \/>\n        var error = OpenVR.Overlay.SetOverlayFromFile(handle, path);<br \/>\n        if (error != EVROverlayError.None)<br \/>\n        {<br \/>\n            throw new Exception(&#8220;Failed to draw image file: &#8221; + error);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    private void ShowOverlay(ulong handle)<br \/>\n    {<br \/>\n        var error = OpenVR.Overlay.ShowOverlay(handle);<br \/>\n        if (error != EVROverlayError.None)<br \/>\n        {<br \/>\n            throw new Exception(&#8220;Failed to show overlay: &#8221; + error);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    private void SetOverlaySize(ulong handle, float size)<br \/>\n    {<br \/>\n        var error = OpenVR.Overlay.SetOverlayWidthInMeters(handle, size);<br \/>\n        if (error != EVROverlayError.None)<br \/>\n        {<br \/>\n            throw new Exception(&#8220;Failed to set overlay size: &#8221; + error);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    private void SetOverlayTransformAbsolute(ulong handle, Vector3 position, Quaternion rotation)<br \/>\n    {<br \/>\n        var rigidTransform = new SteamVR_Utils.RigidTransform(position, rotation);<br \/>\n        var matrix = rigidTransform.ToHmdMatrix34();<br \/>\n        var error = OpenVR.Overlay.SetOverlayTransformAbsolute(handle, ETrackingUniverseOrigin.TrackingUniverseStanding, ref matrix);<br \/>\n        if (error != EVROverlayError.None)<br \/>\n        {<br \/>\n            throw new Exception(&#8220;Failed to set overlay position: &#8221; + error);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    private void SetOverlayTransformRelative(ulong handle, uint deviceIndex, Vector3 position, Quaternion rotation)<br \/>\n    {<br \/>\n        var rigidTransform = new SteamVR_Utils.RigidTransform(position, rotation);<br \/>\n        var matrix = rigidTransform.ToHmdMatrix34();<br \/>\n        var error = OpenVR.Overlay.SetOverlayTransformTrackedDeviceRelative(handle, deviceIndex, ref matrix);<br \/>\n        if (error != EVROverlayError.None)<br \/>\n        {<br \/>\n            throw new Exception(&#8220;Failed to set overlay position: &#8221; + error);<br \/>\n        }<br \/>\n    }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0648\u06a9\u0634 \u0631\u0627 \u0631\u0648\u06cc \u0645\u0686 \u062f\u0633\u062a \u0686\u067e \u0648\u0635\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645.  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062e\u0631\u0648\u062c\u06cc \u062f\u0648\u0631\u0628\u06cc\u0646 \u06cc\u0648\u0646\u06cc\u062a\u06cc \u0631\u0627 \u0628\u0647 \u062c\u0627\u06cc \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u062f\u0631 \u0642\u0633\u0645\u062a \u0628\u0639\u062f\u06cc \u0631\u0648\u06cc \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0628\u06a9\u0634\u06cc\u0645.<\/p>\n<div data-article-id=\"1890290\" id=\"article-body\">\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#HMD_%D8%B1%D8%A7_%D8%AF%D9%86%D8%A8%D8%A7%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\" >HMD \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%DA%A9%D8%AF_%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D8%B1%D8%A7_%D8%AD%D8%B0%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\" >\u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D8%B4%D8%A7%D8%AE%D8%B5_%D8%AF%D8%B3%D8%AA%DA%AF%D8%A7%D9%87\" >\u0634\u0627\u062e\u0635 \u062f\u0633\u062a\u06af\u0627\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D9%88_%DA%86%D8%B1%D8%AE%D8%B4_%D8%B1%D8%A7_%D8%A2%D9%85%D8%A7%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0648\u0642\u0639\u06cc\u062a \u0648 \u0686\u0631\u062e\u0634 \u0631\u0627 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D9%86%D8%B3%D8%A8%DB%8C_%D8%B1%D8%A7_%D8%A8%D8%B1_%D8%A7%D8%B3%D8%A7%D8%B3_HMD_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0648\u0642\u0639\u06cc\u062a \u0646\u0633\u0628\u06cc \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 HMD \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D8%B3%D8%A7%D8%B2%D9%85%D8%A7%D9%86%D8%AF%D9%87%DB%8C_%DA%A9%D8%AF\" >\u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u06a9\u062f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D8%B1%D8%A7_%D8%AF%D9%86%D8%A8%D8%A7%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\" >\u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D9%86%D9%85%D8%A7%DB%8C%D9%87_%D8%AF%D8%B3%D8%AA%DA%AF%D8%A7%D9%87_%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D8%B1%D8%A7_%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0646\u0645\u0627\u06cc\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D8%B1%D8%A7_%D8%AF%D9%86%D8%A8%D8%A7%D9%84_%DA%A9%D9%86%DB%8C%D8%AF-2\" >\u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D9%87%D9%85%D9%BE%D9%88%D8%B4%D8%A7%D9%86%DB%8C_%D8%B1%D8%A7_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C_%D8%B9%D8%B6%D9%88\" >\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0639\u0636\u0648<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7_%D8%B1%D8%A7_%D8%AF%D8%B1_%DA%A9%D8%AF_%D8%AC%D8%A7%DB%8C%DA%AF%D8%B2%DB%8C%D9%86_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u062a\u063a\u06cc\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631 \u06a9\u062f \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87_%D9%88_%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D8%B1%D8%A7_%D8%AF%D8%B1_Update_%D8%A8%D9%87_%D8%B1%D9%88%D8%B2_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062f\u0631 Update() \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D9%87%D9%85%D9%BE%D9%88%D8%B4%D8%A7%D9%86%DB%8C_%D8%B1%D8%A7_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF-2\" >\u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D8%AD%D8%B0%D9%81_%DA%A9%D8%AF_%D9%85%D9%88%D9%82%D8%AA\" >\u062d\u0630\u0641 \u06a9\u062f \u0645\u0648\u0642\u062a<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%D9%87%D9%86%DA%AF%D8%A7%D9%85%DB%8C_%DA%A9%D9%87_%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D9%85%D8%AA%D8%B5%D9%84_%D9%86%DB%8C%D8%B3%D8%AA\" >\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0645\u062a\u0635\u0644 \u0646\u06cc\u0633\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/part-6-follow-device-3jfb\/#%DA%A9%D8%AF_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\" >\u06a9\u062f \u0646\u0647\u0627\u06cc\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"HMD_%D8%B1%D8%A7_%D8%AF%D9%86%D8%A8%D8%A7%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  HMD \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p><em>\u067e\u0648\u0634\u0634 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 HMD<\/em><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF_%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D8%B1%D8%A7_%D8%AD%D8%B0%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0628\u062a\u062f\u0627 \u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u0637\u0644\u0642\u06cc \u06a9\u0647 \u062f\u0631 \u0642\u0633\u0645\u062a \u0642\u0628\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u06cc\u0645 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    overlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span>    SetOverlaySize(overlayHandle, 0.5f);\n<span class=\"err\">\n<\/span><span class=\"gd\">-   var position = new Vector3(0, 2, 3);\n-   var rotation = Quaternion.Euler(0, 0, 45);\n-   SetOverlayTransformAbsolute(overlayHandle, position, rotation);\n<\/span><span class=\"err\">\n<\/span>    ShowOverlay(overlayHandle);\n<span class=\"err\">\n<\/span>    ...\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B4%D8%A7%D8%AE%D8%B5_%D8%AF%D8%B3%D8%AA%DA%AF%D8%A7%D9%87\"><\/span>\n<p>  \u0634\u0627\u062e\u0635 \u062f\u0633\u062a\u06af\u0627\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 SteamVR\u060c \u062f\u0633\u062a\u06af\u0627\u0647 \u0647\u0627\u06cc \u0645\u062a\u0635\u0644 \u0628\u0627 Device Index \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u062a\u062e\u0635\u06cc\u0635 \u0645\u06cc \u06cc\u0627\u0628\u062f\u060c \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0645\u06cc \u0634\u0648\u0646\u062f.  (\u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a\u060c \u0648\u06cc\u06a9\u06cc \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f)<br \/>\u0628\u0631\u0627\u06cc HMD\u060c \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 OpenVR.k_unTrackedDeviceIndex_Hmd \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0647\u0645\u06cc\u0634\u0647 0 \u0627\u0633\u062a.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D9%88_%DA%86%D8%B1%D8%AE%D8%B4_%D8%B1%D8%A7_%D8%A2%D9%85%D8%A7%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0648\u0642\u0639\u06cc\u062a \u0648 \u0686\u0631\u062e\u0634 \u0631\u0627 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u067e\u0648\u0634\u0634 \u0631\u0627 \u062f\u0631 2 \u0645\u062a\u0631 \u062c\u0644\u0648\u062a\u0631 (\u0645\u062d\u0648\u0631 Z) HMD \u0646\u0645\u0627\u06cc\u0634 \u062f\u0647\u06cc\u0645.  \u0645\u0627\u0646\u0646\u062f \u0642\u0633\u0645\u062a \u0642\u0628\u0644 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f <code>position<\/code> \u0648 <code>rotation<\/code> \u0645\u062a\u063a\u06cc\u0631\u0647\u0627<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    overlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span><span class=\"gi\">+   var position = new Vector3(0, 0, 2);\n+   var rotation = Quaternion.Euler(0, 0, 0);\n<\/span><span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span>    SetOverlaySize(overlayHandle, 0.5f);\n    ShowOverlay(overlayHandle);\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D9%86%D8%B3%D8%A8%DB%8C_%D8%B1%D8%A7_%D8%A8%D8%B1_%D8%A7%D8%B3%D8%A7%D8%B3_HMD_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0648\u0642\u0639\u06cc\u062a \u0646\u0633\u0628\u06cc \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 HMD \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0632 SetOverlayTransformTrackedDeviceRelative() \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u0648\u0642\u0639\u06cc\u062a \u0646\u0633\u0628\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 HMD \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.  (\u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a\u060c \u0648\u06cc\u06a9\u06cc \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f)<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    overlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span>    var position = new Vector3(0, 0, 2);\n    var rotation = Quaternion.Euler(0, 0, 0);\n    var rigidTransform = new SteamVR_Utils.RigidTransform(position, rotation);\n    var matrix = rigidTransform.ToHmdMatrix34();\n<span class=\"gi\">+   var error = OpenVR.Overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, ref matrix);\n+   if (error != EVROverlayError.None)\n+   {\n+       throw new Exception(\"Failed to set overlay position: \" + error);\n+   }\n<\/span><span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span>    SetOverlaySize(overlayHandle, 0.5f);\n    ShowOverlay(overlayHandle);\n} \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646\u062f\u06a9\u0633 \u062f\u0633\u062a\u06af\u0627\u0647 HMD \u0631\u0627 \u067e\u0627\u0633 \u06a9\u0646\u06cc\u062f (<code>OpenVR.k_unTrackedDeviceIndex_Hmd<\/code>) \u0648 \u0645\u0627\u062a\u0631\u06cc\u0633 \u062a\u0628\u062f\u06cc\u0644.<br \/>\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u067e\u0648\u0634\u0634 2 \u0645\u062a\u0631 \u062c\u0644\u0648\u062a\u0631 \u0627\u0632 HMD \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fql6lml9c94kxid987g5b.gif\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"600\" height=\"338\" data-animated=\"true\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%B2%D9%85%D8%A7%D9%86%D8%AF%D9%87%DB%8C_%DA%A9%D8%AF\"><\/span>\n<p>  \u0633\u0627\u0632\u0645\u0627\u0646\u062f\u0647\u06cc \u06a9\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0646\u0633\u0628\u06cc \u0631\u0627 \u0628\u0647 \u062f\u0627\u062e\u0644 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0646\u06cc\u062f <code>SetOverlayTransformRelative()<\/code>.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    overlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span>    var position = new Vector3(0, 0, 2);\n    var rotation = Quaternion.Euler(0, 0, 0);\n<span class=\"gd\">-   var rigidTransform = new SteamVR_Utils.RigidTransform(position, rotation);\n-   var matrix = rigidTransform.ToHmdMatrix34();\n-   var error = OpenVR.Overlay.SetOverlayTransformTrackedDeviceRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, ref matrix);\n-   if (error != EVROverlayError.None)\n-   {\n-       throw new Exception(\"Failed to set overlay position: \" + error);\n-   }\n<\/span><span class=\"gi\">+   SetOverlayTransformRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, position, rotation);\n<\/span><span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span>    SetOverlaySize(overlayHandle, 0.5f);\n    ShowOverlay(overlayHandle);\n} \n<span class=\"err\">\n<\/span>...\n<span class=\"err\">\n<\/span><span class=\"gi\">+ \/\/ Pass deviceIndex as argument.\n+ private void SetOverlayTransformRelative(ulong handle, uint deviceIndex, Vector3 position, Quaternion rotation)\n+ {\n+     var rigidTransform = new SteamVR_Utils.RigidTransform(position, rotation);\n+     var matrix = rigidTransform.ToHmdMatrix34();\n+     var error = OpenVR.Overlay.SetOverlayTransformTrackedDeviceRelative(handle, deviceIndex, ref matrix);\n+     if (error != EVROverlayError.None)\n+     {\n+         throw new Exception(\"Failed to set overlay position: \" + error);\n+     }\n+ }\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D8%B1%D8%A7_%D8%AF%D9%86%D8%A8%D8%A7%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08cvlc1tipb7w8ibg931.gif\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"600\" height=\"338\" data-animated=\"true\" title=\"\"><\/p>\n<p><em>\u067e\u0648\u0634\u0634 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u062a\u0631\u0644\u0631<\/em><\/p>\n<p>\u0627\u0632 \u0646\u0645\u0627\u06cc\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0647 \u062c\u0627\u06cc HMD \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0627\u0632 \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644\u0631 \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%86%D9%85%D8%A7%DB%8C%D9%87_%D8%AF%D8%B3%D8%AA%DA%AF%D8%A7%D9%87_%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D8%B1%D8%A7_%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0646\u0645\u0627\u06cc\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0641\u0647\u0631\u0633\u062a \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0633\u0645\u062a \u0686\u067e \u0631\u0627 \u0628\u0627 GetTrackedDeviceIndexForControllerRole() \u0627\u0632 <code>OpenVR.System<\/code>.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    overlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span>    var position = new Vector3(0, 0, 2);\n    var rotation = Quaternion.Euler(0, 0, 0);\n<span class=\"gi\">+   var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);\n<\/span>    SetOverlayTransformRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, position, rotation);\n<span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span>    SetOverlaySize(overlayHandle, 0.5f);\n    ShowOverlay(overlayHandle);\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u0627\u06cc\u0646 \u0627\u0633\u062a:<br \/>\u06a9\u0646\u062a\u0631\u0644\u0631 \u0686\u067e: <code>EtrackedControllerRole.LeftHand<\/code><br \/>\u06a9\u0646\u062a\u0631\u0644\u0631 \u0633\u0645\u062a \u0631\u0627\u0633\u062a: <code>EtrackedControllerRole.RightHand<\/code><\/p>\n<p>\u0627\u06af\u0631 \u0646\u062a\u0648\u0627\u0646\u0633\u062a \u0646\u0645\u0627\u06cc\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u062f\u060c \u0645\u062b\u0644 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0642\u0637\u0639 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c <code>GetTrackedDeviceIndexForControllerRole()<\/code> \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f <code>k_unTrackedDeviceIndexInvalid<\/code>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D8%B1%D8%A7_%D8%AF%D9%86%D8%A8%D8%A7%D9%84_%DA%A9%D9%86%DB%8C%D8%AF-2\"><\/span>\n<p>  \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0627 \u0646\u0645\u0627\u06cc\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0686\u067e \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0633\u067e\u0633 \u0631\u0648\u06a9\u0634 \u0631\u0627 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u0645.  \u0627\u06cc\u0646\u062f\u06a9\u0633 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u0628\u0647 <code>SetOverlayTransformRelative()<\/code> \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0628\u0631\u0627\u06cc HMD \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    overlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span>    var position = new Vector3(0, 0, 2);\n    var rotation = Quaternion.Euler(0, 0, 0);\n    var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);\n<span class=\"gd\">-   SetOverlayTransformRelative(overlayHandle, OpenVR.k_unTrackedDeviceIndex_Hmd, position, rotation);\n<\/span><span class=\"gi\">+   if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)\n+   {\n+       SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);\n+   }\n<\/span><span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span>    SetOverlaySize(overlayHandle, 0.5f);\n<span class=\"err\">\n<\/span>    ShowOverlay(overlayHandle);\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0633\u0645\u062a \u0686\u067e \u0628\u0647 \u067e\u0646\u062c\u0631\u0647 SteamVR \u0645\u062a\u0635\u0644 \u0627\u0633\u062a\u060c \u0633\u067e\u0633 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08cvlc1tipb7w8ibg931.gif\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"600\" height=\"338\" data-animated=\"true\" title=\"\"><\/p>\n<p>\u0631\u0648\u06a9\u0634 \u0628\u0627\u06cc\u062f \u0628\u0647 \u062c\u0627\u06cc HMD \u0627\u0632 \u06a9\u0646\u062a\u0631\u0644\u0631 \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0646\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjmmnky9frehmnx2vte8l.png\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"600\" height=\"338\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D9%87%D9%85%D9%BE%D9%88%D8%B4%D8%A7%D9%86%DB%8C_%D8%B1%D8%A7_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0633\u0627\u0639\u062a\u060c \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648\u06a9\u0634 \u0631\u0648\u06cc \u0645\u0686 \u062f\u0633\u062a \u0686\u067e \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645.  \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062f\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 Unity \u0642\u0627\u0628\u0644 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C_%D8%B9%D8%B6%D9%88\"><\/span>\n<p>  \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0639\u0636\u0648<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0627\u0646\u062f\u0627\u0632\u0647\u060c \u0645\u0648\u0642\u0639\u06cc\u062a \u0648 \u0686\u0631\u062e\u0634 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0639\u0636\u0627\u06cc \u06a9\u0644\u0627\u0633 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.  \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc Range() \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0644\u063a\u0632\u0646\u062f\u0647 \u062f\u0631 \u0628\u0627\u0632\u0631\u0633 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">public class WatchOverlay : MonoBehaviour\n<\/span>{\n    private ulong overlayHandle = OpenVR.k_ulOverlayHandleInvalid;\n<span class=\"err\">\n<\/span><span class=\"gi\">+   [Range(0, 0.5f)] public float size = 0.5f;\n+   [Range(-0.2f, 0.2f)] public float x;\n+   [Range(-0.2f, 0.2f)] public float y;\n+   [Range(-0.2f, 0.2f)] public float z;\n+   [Range(0, 360)] public int rotationX;\n+   [Range(0, 360)] public int rotationY;\n+   [Range(0, 360)] public int rotationZ;\n<\/span><span class=\"err\">\n<\/span>    ...\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0644\u063a\u0632\u0646\u062f\u0647 \u0647\u0627 \u0631\u0648\u06cc \u0628\u0627\u0632\u0631\u0633 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0rwcmeuudxeu6qfsohll.png\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"305\" height=\"239\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7_%D8%B1%D8%A7_%D8%AF%D8%B1_%DA%A9%D8%AF_%D8%AC%D8%A7%DB%8C%DA%AF%D8%B2%DB%8C%D9%86_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u062a\u063a\u06cc\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631 \u06a9\u062f \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u06a9\u062f \u0631\u0627 \u0628\u0627 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0639\u0636\u0648 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    overlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span><span class=\"gd\">-   var position = new Vector3(0, 0, 2);\n-   var rotation = Quaternion.Euler(0, 0, 0);\n<\/span><span class=\"gi\">+   var position = new Vector3(x, y, z);\n+   var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ); \n<\/span>    var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);\n    if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)\n    {\n        SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);\n    }\n<span class=\"err\">\n<\/span>    SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);\n<span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span><span class=\"gd\">-   SetOverlaySize(overlayHandle, 0.5f);\n<\/span><span class=\"gi\">+   SetOverlaySize(overlayHandle, size);\n<\/span>    ShowOverlay(overlayHandle);\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87_%D9%88_%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D8%B1%D8%A7_%D8%AF%D8%B1_Update_%D8%A8%D9%87_%D8%B1%D9%88%D8%B2_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062f\u0631 Update() \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0628\u0627 \u0627\u0641\u0632\u0648\u062f\u0646 \u06a9\u062f \u0628\u0647 \u0622\u0646 \u0642\u0627\u0628\u0644 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f <code>Update()<\/code>.  \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u06a9\u062f \u0628\u0639\u062f\u0627 \u062d\u0630\u0641 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.  \u0628\u0631\u0627\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0648 \u0686\u0631\u062e\u0634 \u0645\u0648\u0642\u062a\u06cc \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    overlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span>    var position = new Vector3(x, y, z);\n    var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);\n    var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);\n    if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)\n    {\n        SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);\n    }\n<span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span>    SetOverlaySize(overlayHandle, size);\n    ShowOverlay(overlayHandle);\n}\n<span class=\"err\">\n<\/span><span class=\"gi\">+ private void Update()\n+ {\n+     SetOverlaySize(overlayHandle, size);\n+ \n+     var position = new Vector3(x, y, z);\n+     var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ); \n+     var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);\n+     if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)\n+     {\n+         SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);\n+     }\n+ }\n<\/span><span class=\"err\">\n<\/span>...\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.  \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0646\u0648\u0627\u0631 \u0644\u063a\u0632\u0646\u062f\u0647 \u0628\u0627\u0632\u0631\u0633 \u0627\u0646\u062f\u0627\u0632\u0647 \u0648 \u0645\u0648\u0642\u0639\u06cc\u062a \u067e\u0648\u0634\u0634 \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79hvoidyb6dcwpmkg0ih.png\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"800\" height=\"800\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA_%D9%87%D9%85%D9%BE%D9%88%D8%B4%D8%A7%D9%86%DB%8C_%D8%B1%D8%A7_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF-2\"><\/span>\n<p>  \u0645\u0648\u0642\u0639\u06cc\u062a \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0644\u063a\u0632\u0646\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0648\u06a9\u0634 \u0631\u0648\u06cc \u0645\u0686 \u062f\u0633\u062a \u0686\u067e \u062d\u0631\u06a9\u062a \u062f\u0647\u06cc\u062f.  \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0627\u0633\u0644\u0627\u06cc\u062f\u0631\u0647\u0627 \u0631\u0627 \u0627\u0632 \u067e\u0646\u062c\u0631\u0647 \u062f\u0633\u06a9\u062a\u0627\u067e \u06a9\u0647 \u062f\u0631 \u062f\u0627\u0634\u0628\u0648\u0631\u062f SteamVR \u0628\u0627\u0632 \u0645\u06cc \u0634\u0648\u062f \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqjbfksjjm0hy3tjqwtx.png\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"800\" height=\"602\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frltzoo88vrrp6rkbvf4f.gif\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"600\" height=\"338\" data-animated=\"true\" title=\"\"><br \/><em>\u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 Unity \u0631\u0627 \u0627\u0632 \u062f\u0627\u0634\u0628\u0648\u0631\u062f SteamVR \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u06cc\u062f.<\/em><\/p>\n<p>\u0631\u0627\u0647 \u062f\u06cc\u06af\u0631 \u0646\u06af\u0627\u0647 \u06a9\u0631\u062f\u0646 \u0628\u0647 \u0646\u0645\u0627\u06cc HMD \u0631\u0648\u06cc \u062f\u0633\u06a9\u062a\u0627\u067e \u0648 \u062a\u0646\u0638\u06cc\u0645 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627 \u0627\u0633\u062a.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftv8nbl7qw0hn8nqqa4bb.png\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"371\" height=\"488\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtyzqso4fvv3pulq9w8m.gif\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"600\" height=\"352\" data-animated=\"true\" title=\"\"><br \/><em>\u0627\u06af\u0631 \u0646\u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f HMD \u0631\u0627 \u0628\u067e\u0648\u0634\u06cc\u062f \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<\/em><\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>size = 0.08\nx = -0.044\ny = 0.015\nz = -0.131\nrotationX = 154\nrotationY = 262\nrotationZ = 0\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u060c \u0631\u0648\u06cc \u0646\u0627\u0645 \u0645\u0624\u0644\u0641\u0647 WatchOverlay \u06a9\u0644\u06cc\u06a9 \u0631\u0627\u0633\u062a \u06a9\u0631\u062f\u0647 \u0648 Copy Component \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3janr5p3zvi3729050q.png\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"444\" height=\"274\" title=\"\"><\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0645\u062a\u0648\u0642\u0641 \u06a9\u0646\u06cc\u062f\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u0631\u0648\u06cc \u0645\u0624\u0644\u0641\u0647 WatchOverlay \u06a9\u0644\u06cc\u06a9 \u0631\u0627\u0633\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0645\u0642\u0627\u062f\u06cc\u0631 \u06a9\u067e\u06cc \u0634\u062f\u0647 \u0631\u0627 \u0628\u0627 Paste Component Value \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28akbb7hcyfwqkil2q47.png\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"313\" height=\"246\" title=\"\"><\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.  \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0631\u0648\u06a9\u0634 \u0631\u0648\u06cc \u0645\u0686 \u062f\u0633\u062a \u0686\u067e \u0628\u0627\u0634\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4hkf0bknwwnbx2vfngq.png\" alt=\"\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062a\u0635\u0648\u06cc\u0631\" loading=\"lazy\" width=\"800\" height=\"800\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AD%D8%B0%D9%81_%DA%A9%D8%AF_%D9%85%D9%88%D9%82%D8%AA\"><\/span>\n<p>  \u062d\u0630\u0641 \u06a9\u062f \u0645\u0648\u0642\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06a9\u062f \u0631\u0627 \u0627\u0632 \u0642\u0633\u0645\u062a \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f <code>Update()<\/code>.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Update()\n<\/span>{\n<span class=\"gd\">-   SetOverlaySize(overlayHandle, size);\n-   \n-   var position = new Vector3(x, y, z);\n-   var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ); \n-   var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);\n-   if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)\n-   {\n-       SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);\n-   }\n<\/span>}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%87%D9%86%DA%AF%D8%A7%D9%85%DB%8C_%DA%A9%D9%87_%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D9%85%D8%AA%D8%B5%D9%84_%D9%86%DB%8C%D8%B3%D8%AA\"><\/span>\n<p>  \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0645\u062a\u0635\u0644 \u0646\u06cc\u0633\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631\u060c \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0627\u06cc\u062f \u0647\u0646\u06af\u0627\u0645 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062a\u0635\u0644 \u0628\u0627\u0634\u062f\u060c \u0632\u06cc\u0631\u0627 \u0645\u0627 \u0634\u0627\u062e\u0635 \u062f\u0633\u062a\u06af\u0627\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>Start()<\/code>.<br \/>\u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u062f \u0641\u0647\u0631\u0633\u062a \u062f\u0633\u062a\u06af\u0627\u0647 \u0631\u0627 \u0627\u0632 <code>Start()<\/code> to Update() \u0628\u0631\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u062f\u0631 \u0648\u0633\u0637 \u0648\u0635\u0644 \u06cc\u0627 \u0642\u0637\u0639 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight diff\"><code><span class=\"p\">private void Start()\n<\/span>{\n    InitOpenVR();\n    OverlayHandle = CreateOverlay(\"WatchOverlayKey\", \"WatchOverlay\");\n<span class=\"err\">\n<\/span><span class=\"gd\">-   var position = new Vector3(x, y, z);\n-   var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);\n-   var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);\n-   if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)\n-   {\n-       SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);\n-   }\n<\/span><span class=\"err\">\n<\/span>    var filePath = Application.streamingAssetsPath + \"\/sns-icon.jpg\";\n    SetOverlayFromFile(overlayHandle, filePath);\n<span class=\"err\">\n<\/span>    SetOverlaySize(overlayHandle, size);\n<span class=\"err\">\n<\/span>    ShowOverlay(overlayHandle);\n}\n<span class=\"err\">\n<\/span><span class=\"gi\">+ private void Update()\n+ {\n+     var position = new Vector3(x, y, z);\n+     var rotation = Quaternion.Euler(rotationX, rotationY, rotationZ);\n+     var leftControllerIndex = OpenVR.System.GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole.LeftHand);\n+     if (leftControllerIndex != OpenVR.k_unTrackedDeviceIndexInvalid)\n+     {\n+         SetOverlayTransformRelative(overlayHandle, leftControllerIndex, position, rotation);\n+     }\n+ }\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062d\u0627\u0644\u0627 \u062d\u062a\u06cc \u0627\u06af\u0631 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0627\u0632 \u0648\u0633\u0637 \u0648\u0635\u0644 \u0628\u0627\u0634\u062f \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\"><\/span>\n<p>  \u06a9\u062f \u0646\u0647\u0627\u06cc\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">using<\/span> <span class=\"nn\">UnityEngine<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">Valve.VR<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">System<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">WatchOverlay<\/span> <span class=\"p\">:<\/span> <span class=\"n\">MonoBehaviour<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">private<\/span> <span class=\"kt\">ulong<\/span> <span class=\"n\">overlayHandle<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">k_ulOverlayHandleInvalid<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"p\">[<\/span><span class=\"nf\">Range<\/span><span class=\"p\">(<\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">0.5f<\/span><span class=\"p\">)]<\/span> <span class=\"k\">public<\/span> <span class=\"kt\">float<\/span> <span class=\"n\">size<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">[<\/span><span class=\"nf\">Range<\/span><span class=\"p\">(-<\/span><span class=\"m\">0.2f<\/span><span class=\"p\">,<\/span> <span class=\"m\">0.2f<\/span><span class=\"p\">)]<\/span> <span class=\"k\">public<\/span> <span class=\"kt\">float<\/span> <span class=\"n\">x<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">[<\/span><span class=\"nf\">Range<\/span><span class=\"p\">(-<\/span><span class=\"m\">0.2f<\/span><span class=\"p\">,<\/span> <span class=\"m\">0.2f<\/span><span class=\"p\">)]<\/span> <span class=\"k\">public<\/span> <span class=\"kt\">float<\/span> <span class=\"n\">y<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">[<\/span><span class=\"nf\">Range<\/span><span class=\"p\">(-<\/span><span class=\"m\">0.2f<\/span><span class=\"p\">,<\/span> <span class=\"m\">0.2f<\/span><span class=\"p\">)]<\/span> <span class=\"k\">public<\/span> <span class=\"kt\">float<\/span> <span class=\"n\">z<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">[<\/span><span class=\"nf\">Range<\/span><span class=\"p\">(<\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">360<\/span><span class=\"p\">)]<\/span> <span class=\"k\">public<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">rotationX<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">[<\/span><span class=\"nf\">Range<\/span><span class=\"p\">(<\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">360<\/span><span class=\"p\">)]<\/span> <span class=\"k\">public<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">rotationY<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">[<\/span><span class=\"nf\">Range<\/span><span class=\"p\">(<\/span><span class=\"m\">0<\/span><span class=\"p\">,<\/span> <span class=\"m\">360<\/span><span class=\"p\">)]<\/span> <span class=\"k\">public<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">rotationZ<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Start<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nf\">InitOpenVR<\/span><span class=\"p\">();<\/span>\n        <span class=\"n\">overlayHandle<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">CreateOverlay<\/span><span class=\"p\">(<\/span><span class=\"s\">\"WatchOverlayKey\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"WatchOverlay\"<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"kt\">var<\/span> <span class=\"n\">filePath<\/span> <span class=\"p\">=<\/span> <span class=\"n\">Application<\/span><span class=\"p\">.<\/span><span class=\"n\">streamingAssetsPath<\/span> <span class=\"p\">+<\/span> <span class=\"s\">\"\/sns-icon.jpg\"<\/span><span class=\"p\">;<\/span>\n        <span class=\"nf\">SetOverlayFromFile<\/span><span class=\"p\">(<\/span><span class=\"n\">overlayHandle<\/span><span class=\"p\">,<\/span> <span class=\"n\">filePath<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"nf\">SetOverlaySize<\/span><span class=\"p\">(<\/span><span class=\"n\">overlayHandle<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span><span class=\"p\">);<\/span>\n        <span class=\"nf\">ShowOverlay<\/span><span class=\"p\">(<\/span><span class=\"n\">overlayHandle<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Update<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">position<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Vector3<\/span><span class=\"p\">(<\/span><span class=\"n\">x<\/span><span class=\"p\">,<\/span> <span class=\"n\">y<\/span><span class=\"p\">,<\/span> <span class=\"n\">z<\/span><span class=\"p\">);<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">rotation<\/span> <span class=\"p\">=<\/span> <span class=\"n\">Quaternion<\/span><span class=\"p\">.<\/span><span class=\"nf\">Euler<\/span><span class=\"p\">(<\/span><span class=\"n\">rotationX<\/span><span class=\"p\">,<\/span> <span class=\"n\">rotationY<\/span><span class=\"p\">,<\/span> <span class=\"n\">rotationZ<\/span><span class=\"p\">);<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">leftControllerIndex<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"nf\">GetTrackedDeviceIndexForControllerRole<\/span><span class=\"p\">(<\/span><span class=\"n\">ETrackedControllerRole<\/span><span class=\"p\">.<\/span><span class=\"n\">LeftHand<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">leftControllerIndex<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">k_unTrackedDeviceIndexInvalid<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"nf\">SetOverlayTransformRelative<\/span><span class=\"p\">(<\/span><span class=\"n\">overlayHandle<\/span><span class=\"p\">,<\/span> <span class=\"n\">leftControllerIndex<\/span><span class=\"p\">,<\/span> <span class=\"n\">position<\/span><span class=\"p\">,<\/span> <span class=\"n\">rotation<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">OnApplicationQuit<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nf\">DestroyOverlay<\/span><span class=\"p\">(<\/span><span class=\"n\">overlayHandle<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">OnDestroy<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nf\">ShutdownOpenVR<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">InitOpenVR<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">System<\/span> <span class=\"p\">!=<\/span> <span class=\"k\">null<\/span><span class=\"p\">)<\/span> <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n\n        <span class=\"kt\">var<\/span> <span class=\"n\">error<\/span> <span class=\"p\">=<\/span> <span class=\"n\">EVRInitError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">;<\/span>\n        <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"nf\">Init<\/span><span class=\"p\">(<\/span><span class=\"k\">ref<\/span> <span class=\"n\">error<\/span><span class=\"p\">,<\/span> <span class=\"n\">EVRApplicationType<\/span><span class=\"p\">.<\/span><span class=\"n\">VRApplication_Overlay<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">EVRInitError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to initialize OpenVR: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">ShutdownOpenVR<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">System<\/span> <span class=\"p\">!=<\/span> <span class=\"k\">null<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"nf\">Shutdown<\/span><span class=\"p\">();<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"kt\">ulong<\/span> <span class=\"nf\">CreateOverlay<\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span> <span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span> <span class=\"n\">name<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">handle<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">k_ulOverlayHandleInvalid<\/span><span class=\"p\">;<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">error<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">Overlay<\/span><span class=\"p\">.<\/span><span class=\"nf\">CreateOverlay<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">name<\/span><span class=\"p\">,<\/span> <span class=\"k\">ref<\/span> <span class=\"n\">handle<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">EVROverlayError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to create overlay: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">return<\/span> <span class=\"n\">handle<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">DestroyOverlay<\/span><span class=\"p\">(<\/span><span class=\"kt\">ulong<\/span> <span class=\"n\">handle<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">handle<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">k_ulOverlayHandleInvalid<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"kt\">var<\/span> <span class=\"n\">error<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">Overlay<\/span><span class=\"p\">.<\/span><span class=\"nf\">DestroyOverlay<\/span><span class=\"p\">(<\/span><span class=\"n\">handle<\/span><span class=\"p\">);<\/span>\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">EVROverlayError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to dispose overlay: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">);<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">SetOverlayFromFile<\/span><span class=\"p\">(<\/span><span class=\"kt\">ulong<\/span> <span class=\"n\">handle<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span> <span class=\"n\">path<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">error<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">Overlay<\/span><span class=\"p\">.<\/span><span class=\"nf\">SetOverlayFromFile<\/span><span class=\"p\">(<\/span><span class=\"n\">handle<\/span><span class=\"p\">,<\/span> <span class=\"n\">path<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">EVROverlayError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to draw image file: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">ShowOverlay<\/span><span class=\"p\">(<\/span><span class=\"kt\">ulong<\/span> <span class=\"n\">handle<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">error<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">Overlay<\/span><span class=\"p\">.<\/span><span class=\"nf\">ShowOverlay<\/span><span class=\"p\">(<\/span><span class=\"n\">handle<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">EVROverlayError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to show overlay: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">SetOverlaySize<\/span><span class=\"p\">(<\/span><span class=\"kt\">ulong<\/span> <span class=\"n\">handle<\/span><span class=\"p\">,<\/span> <span class=\"kt\">float<\/span> <span class=\"n\">size<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">error<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">Overlay<\/span><span class=\"p\">.<\/span><span class=\"nf\">SetOverlayWidthInMeters<\/span><span class=\"p\">(<\/span><span class=\"n\">handle<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">EVROverlayError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to set overlay size: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">SetOverlayTransformAbsolute<\/span><span class=\"p\">(<\/span><span class=\"kt\">ulong<\/span> <span class=\"n\">handle<\/span><span class=\"p\">,<\/span> <span class=\"n\">Vector3<\/span> <span class=\"n\">position<\/span><span class=\"p\">,<\/span> <span class=\"n\">Quaternion<\/span> <span class=\"n\">rotation<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">rigidTransform<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">SteamVR_Utils<\/span><span class=\"p\">.<\/span><span class=\"nf\">RigidTransform<\/span><span class=\"p\">(<\/span><span class=\"n\">position<\/span><span class=\"p\">,<\/span> <span class=\"n\">rotation<\/span><span class=\"p\">);<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">matrix<\/span> <span class=\"p\">=<\/span> <span class=\"n\">rigidTransform<\/span><span class=\"p\">.<\/span><span class=\"nf\">ToHmdMatrix34<\/span><span class=\"p\">();<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">error<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">Overlay<\/span><span class=\"p\">.<\/span><span class=\"nf\">SetOverlayTransformAbsolute<\/span><span class=\"p\">(<\/span><span class=\"n\">handle<\/span><span class=\"p\">,<\/span> <span class=\"n\">ETrackingUniverseOrigin<\/span><span class=\"p\">.<\/span><span class=\"n\">TrackingUniverseStanding<\/span><span class=\"p\">,<\/span> <span class=\"k\">ref<\/span> <span class=\"n\">matrix<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">EVROverlayError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to set overlay position: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">SetOverlayTransformRelative<\/span><span class=\"p\">(<\/span><span class=\"kt\">ulong<\/span> <span class=\"n\">handle<\/span><span class=\"p\">,<\/span> <span class=\"kt\">uint<\/span> <span class=\"n\">deviceIndex<\/span><span class=\"p\">,<\/span> <span class=\"n\">Vector3<\/span> <span class=\"n\">position<\/span><span class=\"p\">,<\/span> <span class=\"n\">Quaternion<\/span> <span class=\"n\">rotation<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">rigidTransform<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">SteamVR_Utils<\/span><span class=\"p\">.<\/span><span class=\"nf\">RigidTransform<\/span><span class=\"p\">(<\/span><span class=\"n\">position<\/span><span class=\"p\">,<\/span> <span class=\"n\">rotation<\/span><span class=\"p\">);<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">matrix<\/span> <span class=\"p\">=<\/span> <span class=\"n\">rigidTransform<\/span><span class=\"p\">.<\/span><span class=\"nf\">ToHmdMatrix34<\/span><span class=\"p\">();<\/span>\n        <span class=\"kt\">var<\/span> <span class=\"n\">error<\/span> <span class=\"p\">=<\/span> <span class=\"n\">OpenVR<\/span><span class=\"p\">.<\/span><span class=\"n\">Overlay<\/span><span class=\"p\">.<\/span><span class=\"nf\">SetOverlayTransformTrackedDeviceRelative<\/span><span class=\"p\">(<\/span><span class=\"n\">handle<\/span><span class=\"p\">,<\/span> <span class=\"n\">deviceIndex<\/span><span class=\"p\">,<\/span> <span class=\"k\">ref<\/span> <span class=\"n\">matrix<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">error<\/span> <span class=\"p\">!=<\/span> <span class=\"n\">EVROverlayError<\/span><span class=\"p\">.<\/span><span class=\"n\">None<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Exception<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to set overlay position: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">error<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0648\u06a9\u0634 \u0631\u0627 \u0631\u0648\u06cc \u0645\u0686 \u062f\u0633\u062a \u0686\u067e \u0648\u0635\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645.  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062e\u0631\u0648\u062c\u06cc \u062f\u0648\u0631\u0628\u06cc\u0646 \u06cc\u0648\u0646\u06cc\u062a\u06cc \u0631\u0627 \u0628\u0647 \u062c\u0627\u06cc \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u062f\u0631 \u0642\u0633\u0645\u062a \u0628\u0639\u062f\u06cc \u0631\u0648\u06cc \u0647\u0645\u067e\u0648\u0634\u0627\u0646\u06cc \u0628\u06a9\u0634\u06cc\u0645.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang HMD \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f \u067e\u0648\u0634\u0634 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 HMD \u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f \u0627\u0628\u062a\u062f\u0627 \u06a9\u062f \u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u0637\u0644\u0642\u06cc \u06a9\u0647 \u062f\u0631 \u0642\u0633\u0645\u062a \u0642\u0628\u0644 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u06cc\u0645 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f. private void Start() { InitOpenVR(); overlayHandle = CreateOverlay(&#8220;WatchOverlayKey&#8221;, &#8220;WatchOverlay&#8221;); var filePath = Application.streamingAssetsPath + &#8220;\/sns-icon.jpg&#8221;; SetOverlayFromFile(overlayHandle, filePath); SetOverlaySize(overlayHandle, 0.5f); &#8211; &hellip;<\/p>\n","protected":false},"author":2,"featured_media":66913,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-66912","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/66912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=66912"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/66912\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/66913"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=66912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=66912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=66912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}