2016-03-25 18 views
0

私はUnityでgoogle cardboard用の単純なVRゲームを作成しています。スコアを表示し、カメラの子であるUIテキストを作成しました。私の問題は、いつも見えるようにすることができないということです。スクリーンスペース - オーバーレイで動作するのは知っていますが、ワールドスペースキャンバスでどのように行うのですか?World Space UIをUnityで常に表示するにはどうすればいいですか?

+1

2番目のカメラを作成し、そのカリングマスクを「UI」のみに設定し、それをUI Canvasに割り当てます。このアプローチを使用したくない理由はありますか? – yedpodtrzitko

+0

@yedpodtrzitko私はそれが正常にGoogleのボール紙のカメラで動作するかどうかはわかりません(それは基本的に各目の2つのカメラです)。どのようにイドーこれは?それぞれの目に別のカメラを作成し、そのカリングマスクtp UIを設定しますか? –

+0

@yedpodtrzitko UIカリングマスクを使用して2番目のカメラを作成すると、最後にリオーダーすることができますか? –

答えて

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. で材料を作成し、プロジェクト
  3. でこのシェーダを作成

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

0
  • は空のオブジェクト
  • にそれを添付し、あなたがUIを見たときにオブジェクトが常にそうtransform.translateto

によってあなたのカメラに直面してみましょうオブジェクト

  • にスクリプトを追加それはあなたに向いています

  • 関連する問題