首页 > 其他分享 >解决VR中UGUI world space UI会被其他物体遮挡的问题

解决VR中UGUI world space UI会被其他物体遮挡的问题

时间:2023-08-31 11:55:09浏览次数:35  
标签:Stencil MainTex space fixed4 Float vertex VR UI

  • 问题:
    在制作VR内容时,通常使用的都是UGUI,一般会将Canvas的render mode设置为world space,但是这样设置过后,因为UI是直接放在了场景里面,很容易被其他物体挡住。
  • 解决方法:
    Unity官方的一个VR例子中给出了一个shader的解决方案。
  1. 将如下的shader文件挂在材质上
  2. 将这个材质赋予需要总是显示在所有物体前面的UI控件上。
创建UIShader.shader文件
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

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
	}
	}
}

标签:Stencil,MainTex,space,fixed4,Float,vertex,VR,UI
From: https://www.cnblogs.com/luojua/p/17669216.html

相关文章

  • 分享一些工业管理操作系统的UI界面
    分享一些工业管理操作系统的UI界面2023-05-2714:34·拉斐UI设计       ......
  • StringBuilder类分享(2)
    一、StringBuilder说明StringBuilder是一个可变的字符序列。这个类提供了一个与StringBuffer兼容的API,但不保证同步,即StringBuilder不是线程安全的,而StringBuffer是线程安全的。显然,StringBuilder要运行的更快一点。这个类被设计为在字符串缓冲区所在的地方作为StringBuffer的临时......
  • Skywalking UI介绍
    Skywalkingui页面功能菜单栏 仪表盘:查看被监控服务的运行状态;拓扑图:以拓扑图的方式展现服务之间的关系,并以此为入口查看相关信息;追踪:以接口列表的方式展现,追踪接口内部调用过程;性能剖析:对端点进行采样分析,并可查看堆栈信息;告警:触发告警的告警列表,包括服务失败率,请求超......
  • hbuilderx
     HBuilderX-高效极客技巧(dcloud.io) 装一个node,在装一个HBuilder,在装一个小程序开发工具 cmd到student目录,npmrundev本地启动浏览器输入http://localhost:3000/可以浏览,打包npmrunbuild清除npm缓存的命令: npmcacheclean--force......
  • 说说GUID、ID作为主键区别
    说说GUID、ID作为主键区别GUID主键GUID作为主键的好处:唯一性、无需往返数据库、无法被猜出来GUID作为主键的缺点:存储空间大(16字节)、没有顺序(ABP生成器解决了guid无序问题。)ID主键ID作为主键的好处:存储空间小,int类型只存储4字节,long也就8字节ID作为主键的缺点:主......
  • docker build过程中遇到错误qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so
    Removingintermediatecontainer70af516d5d6b--->a69229847153Step5/6:RUNGO111MODULE="on"gogetgithub.com/jsonnet-bundler/jsonnet-bundler/cmd/jb;ln-s$(goenvGOPATH)/bin/jb/usr/bin/jb--->Runningin13545862fffeqemu-x86_64:......
  • StringBuilder类分享(1)
    一、StringBuilder说明StringBuilder是一个可变的字符序列。这个类提供了一个与StringBuffer兼容的API,但不保证同步,即StringBuilder不是线程安全的,而StringBuffer是线程安全的。显然,StringBuilder要运行的更快一点。这个类被设计为在字符串缓冲区所在的地方作为StringBuffer的临时......
  • 视频汇聚/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?
    开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放......
  • 视频监控/视频汇聚/视频云存储EasyCVR平台HLS流集成在小程序无法播放问题排查
    安防视频/视频云存储/视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储磁盘阵列、......
  • 视频汇聚/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?
    开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放......