UI遮挡游戏物体 VR中利用Shader使UI始终在相机中渲染在最前方

Shader "GUI/Text Shader Custom" {
    Properties {
        _MainTex ("Font Texture", 2D) = "white" {}
        _Color ("Text Color", Color) = (1,1,1,1)
    }
 
    SubShader {
 
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
        Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off }
        Blend SrcAlpha OneMinusSrcAlpha
 
        Pass { 
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma fragmentoption ARB_precision_hint_fastest
 
            #include "UnityCG.cginc"
 
            struct appdata_t {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
            };
 
            struct v2f {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
            };
 
            sampler2D _MainTex;
            uniform float4 _MainTex_ST;
            uniform float4 _Color;
           
            v2f vert (appdata_t v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
                return o;
            }
 
           fixed4 frag (v2f i) : COLOR
            {
                fixed4 col = _Color;
                return 1.25f * tex2D(_MainTex, i.texcoord) * col;
            }
            ENDCG
        }
    }  
 
    SubShader {
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
        Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off }
        Blend SrcAlpha OneMinusSrcAlpha
        Pass {
            Color [_Color]
            SetTexture [_MainTex] {
                combine primary, texture * primary
            }
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity VR项目,当使用射线选取UI元素时,有可能会遇到UI渲染遮挡射线的问题。这是因为UI元素在屏幕上是以2D的形式渲染出来的,而射线则是在3D空间运行的。如果在游戏场景存在3D物体遮挡UI元素,射线就无法直接命UI元素。 解决这个问题的方法可以是使用EventSystem的IsPointerOverGameObject函数来判断射线是否碰撞到了UI元素。首先,需要在场景添加一个EventSystem对象,并将UI元素添加到Canvas组件下。然后,在射线的碰撞检测,使用IsPointerOverGameObject函数来判断是否碰撞到了UI元素。如果返回值为true,即表示射线碰撞到了UI元素,可以进行相应的处理。 另一种解决方法是使用Graphics.Raycast方法来进行射线的检测。该方法可以检测射线是否与UI元素重叠,并返回碰撞信息。根据返回的碰撞信息,可以判断射线是否与UI元素相交,并进行相应的处理。 需要注意的是,为了确保射线的精确性,可以在射线的检测使用layerMask来限制只进行UI元素的检测,避免与其他3D物体碰撞检测产生冲突。同时,还可以调整UI元素的渲染顺序或调整UI元素的位置,以确保射线能够正确地命UI元素。 总而言之,解决Unity VR项目UI渲染遮挡射线的问题可以通过使用EventSystem的IsPointerOverGameObject函数或Graphics.Raycast方法来判断射线是否与UI元素碰撞,并进行相应的处理和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值