2016-03-25 48 views
0

我在Unity中爲谷歌紙板創建簡單的VR遊戲,並且創建了顯示分數的UI文本並且是相機的子項。我的問題是我無法使其始終可見。我知道它可以與Screen Space - Overlay一起使用,但是如何使用World Space Canvas來實現?如何在Unity中始終顯示World Space UI?

+1

創建第二個攝像頭,僅將其「濾鏡蒙版」設置爲「UI」,並將其分配給UI畫布。有沒有你不想使用這種方法的原因? – yedpodtrzitko

+0

@yedpodtrzitko我不確定它是否可以正常使用谷歌紙板相機(每個眼睛基本上有兩個相機)。我該怎麼做?爲每隻眼睛創建另一個相機,並設置其Culling Mask tp UI? –

+0

@yedpodtrzitko如果我設法使用UI剔除掩碼創建第二個相機,那麼我怎樣才能讓它恢復最後? –

回答

3

這是我用來做它的着色器:

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; 
    fixed4 _TextureSampleAdd; //Added for font color support 

    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) + _TextureSampleAdd) * IN.color; //Added for font color support 
     clip(color.a - 0.01); 
     return color; 
    } 
     ENDCG 
    } 
    } 
} 
  1. 在您的項目
  2. 創建這個shader與此着色器
  3. 創建材料的材質應用到要出現在眼前的一切的元素都

來源http://answers.unity3d.com/questions/878667/world-space-canvas-on-top-of-everything.html

0
  • 其附加到空對象
  • 添加腳本對象
  • 讓物體始終面臨相機通過transform.translateto

所以每當你看UI ,它面對你