VR中UGUI在最上层显示的解决方案

该方案参考了CSDN

创建一个Shader,代码如下:

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

//需要赋给场景,专门用于解决UI置顶问题

Shader "UI/Overlay"

{

Properties

{

[PerRendererData] _MainTex ("Font 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

{

LOD 100

Tags

{

"Queue" = "Transparent"

"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 Always

Offset -1, -1

Blend SrcAlpha OneMinusSrcAlpha

ColorMask [_ColorMask]

Pass

{

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "UnityCG.cginc"

#include "UnityUI.cginc"

struct appdata_t

{

float4 vertex : POSITION;

float2 texcoord : TEXCOORD0;

float4 color : COLOR;

};

struct v2f

{

float4 vertex : SV_POSITION;

half2 texcoord : TEXCOORD0;

fixed4 color : COLOR;

};

sampler2D _MainTex;

float4 _MainTex_ST;

fixed4 _Color;

fixed4 _TextureSampleAdd;

v2f vert (appdata_t v)

{

v2f o;

o.vertex = UnityObjectToClipPos(v.vertex);

o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);

o.color = v.color * _Color;

#ifdef UNITY_HALF_TEXEL_OFFSET

o.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);

#endif

return o;

}

fixed4 frag (v2f i) : SV_Target

{

fixed4 col = (tex2D(_MainTex, i.texcoord) + _TextureSampleAdd) * i.color;

clip (col.a - 0.01);

return col;

}

ENDCG

}

}

}


此时Shader没有指定材质,接下来创建一个材质Matierial:

然后,将Shader直接拖拽到这个材质上,拖拽后状态如图所示:

这时这个材质就可以使用了,这里是最关键的一步。

注意:这个材质需要赋给的是所有要显示在这个Canvas下的模型,而不是Canvas里的image,如图:

这里很多CSDN文章中没有说清楚,对初学者十分不友好

到此为止,我们就已经实现了这一需求,可以进行调试了。

你可能感兴趣的:(VR中UGUI在最上层显示的解决方案)