2016-03-25 14 views
0

Ich erstelle ein einfaches VR-Spiel für Google Pappe in Unity und ich erstellte UI Text, der Partitur anzeigt und Kind der Kamera ist. Mein Problem ist, dass ich es nicht immer sichtbar machen kann. Ich weiß, dass es mit Screen Space - Overlay funktioniert, aber wie macht man es mit World Space Canvas?Wie macht man World Space UI in Unity immer sichtbar?

+1

Erstellen Sie eine zweite Kamera, legen Sie ihre Ausblendungsmaske auf "UI" fest und weisen Sie sie dem UI-Canvas zu. Gibt es einen Grund, warum Sie diesen Ansatz nicht verwenden möchten? – yedpodtrzitko

+0

@yedpodtrzitko Ich bin mir nicht sicher, ob es richtig funktioniert mit Google Pappkamera (es ist im Grunde zwei Kameras eine für jedes Auge). Wie soll ich das tun? Erstelle eine andere Kamera für jedes Auge und setze die Culling Mask tp UI? –

+0

@yedpodtrzitko Wenn ich geschafft habe, zweite Kamera (n) mit UI Culling-Maske zu erstellen, wie kann ich es zuletzt machen? –

Antwort

3

Hier ist ein Shader ich es tun bin mit:

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. Erstellen Sie diese Shader in Ihrem Projekt
  2. ein Material mit diesem Shader erstellen
  3. Wenden Sie das Material auf alle Ihre Elemente Sie

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

vor allem erscheinen soll
0
  • Bringen Sie es in ein leeres Objekt
  • ein Skript zum

So von transform.translateto zu Kamera-Objekt hinzufügen

  • lassen das Objekt immer stellen, wenn Sie die ui beobachten , es Ihnen Gesicht

  • Verwandte Themen