2016-03-25 28 views
1

我在統一創建簡單的谷歌紙板遊戲,我想添加分數。我知道如何正常使用它,但在VR中它並不適合我。我試圖把文本和顯示分數放在裏面,它看起來很不錯(不完全是因爲它只顯示一隻眼睛),但是在我測試手機文本後,它的位置完全不同。你知道什麼是正確的做法嗎?在VR中爲谷歌紙板在Unity中的GUI

+0

你是否從紙板上觀看應用紙板設計,有很多提示或者vr的exp。 – tim

回答

2

創建一個世界空間畫布,並將該畫布連接到相機。這就是我如何在VR遊戲中獲得我的UI。

你將需要一個自定義着色器爲你的世界空間用戶界面對象,它的渲染順序爲疊加並關閉ZTest。

這是具有必要更改的默認UI着色器的副本。應該做的伎倆。只需使用此着色器製作材質,然後將其應用於您想要在WorldSpace UI中幾何頂部繪製的所有內容。

Shader "UI/Default_OverlayNoZTest" 
{ 
    Properties 
    { 
     [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} 
     _Color ("Tint", Color) = (1,1,1,1) 

     _StencilComp ("Stencil Comparison", Float) = 8 
     _Stencil ("Stencil ID", Float) = 0 
     _StencilOp ("Stencil Operation", Float) = 0 
     _StencilWriteMask ("Stencil Write Mask", Float) = 255 
     _StencilReadMask ("Stencil Read Mask", Float) = 255 

     _ColorMask ("Color Mask", Float) = 15 
    } 

    SubShader 
    { 
     Tags 
     { 
      "Queue"="Overlay" 
      "IgnoreProjector"="True" 
      "RenderType"="Transparent" 
      "PreviewType"="Plane" 
      "CanUseSpriteAtlas"="True" 
     } 

     Stencil 
     { 
      Ref [_Stencil] 
      Comp [_StencilComp] 
      Pass [_StencilOp] 
      ReadMask [_StencilReadMask] 
      WriteMask [_StencilWriteMask] 
     } 

     Cull Off 
     Lighting Off 
     ZWrite Off 
     ZTest Off 
     Blend SrcAlpha OneMinusSrcAlpha 
     ColorMask [_ColorMask] 

     Pass 
     { 
     CGPROGRAM 
      #pragma vertex vert 
      #pragma fragment frag 
      #include "UnityCG.cginc" 

      struct appdata_t 
      { 
       float4 vertex : POSITION; 
       float4 color : COLOR; 
       float2 texcoord : TEXCOORD0; 
      }; 

      struct v2f 
      { 
       float4 vertex : SV_POSITION; 
       fixed4 color : COLOR; 
       half2 texcoord : TEXCOORD0; 
      }; 

      fixed4 _Color; 

      v2f vert(appdata_t IN) 
      { 
       v2f OUT; 
       OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 
       OUT.texcoord = IN.texcoord; 
#ifdef UNITY_HALF_TEXEL_OFFSET 
       OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1); 
#endif 
       OUT.color = IN.color * _Color; 
       return OUT; 
      } 

      sampler2D _MainTex; 

      fixed4 frag(v2f IN) : SV_Target 
      { 
       half4 color = tex2D(_MainTex, IN.texcoord) * IN.color; 
       clip (color.a - 0.01); 
       return color; 
      } 
     ENDCG 
     } 
    } 
} 

歸功於http://answers.unity3d.com/questions/878667/world-space-canvas-on-top-of-everything.html

+0

你這樣做嗎? http://imgur.com/VLTSEmF它工作正常,但你如何使這個UI始終可見(它有時隱藏在我的遊戲背後)? –

+0

@faken我編輯了我的答案,希望它有幫助。 –

+0

我認爲將這個着色器應用於新的Unity 5.4並不是強制性的。有人可以確認嗎? – Ashish

0

我說;設置一個RenderTexture並讓你的/ UI成爲唯一的東西,然後將RenderTexture粘貼到你的世界中的其他東西上

相關問題