【Unity实战篇 】| 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】

本文介绍了如何在Unity中创建矩形和圆形镂空遮罩效果,作为游戏中的新手引导。通过重写OnPopulateMesh方法绘制图形,并利用ICanvasRaycastFilter接口实现镂空区域的事件穿透,提高了UI性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请添加图片描述

在这里插入图片描述


前言

  • 本文来写一下怎样在Unity中完成一个 镂空遮罩 的效果。
  • 镂空遮罩 比较常用的有两种:矩形镂空遮罩、圆形镂空遮罩。
  • 镂空遮罩 在游戏中常被当做新手引导必备的内容,可以给玩家更多不一样的体验。
  • 下面就一起来看一下怎样做出这种效果吧!

【Unity实战篇 】 | 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】

一、制作原理

在开始制作镂空遮罩前先来看一下Graphic类的OnPopulateMesh方法,借助OnPopulateMesh方法进行重写就可以在Unity中自由绘制图形。


                
Unity实现镂空遮罩Shader通常会涉及到Alpha Blending(透明混合)和Masking(掩模)。下面是一个简单的示例,展示如何创建一个基本的镂空遮罩Shader,可以处理圆形矩形形状。假设我们已经有了一个基础的Sprite Renderer组件,我们将创建一个名为`UIMaskedShader`的Shader: ```glsl Shader "Custom/UIMaskedShader" { Properties { _MainTex ("Texture", 2D) = "white" {} _Color ("Color", Color) = (1,1,1,1) _MaskTex ("Mask Texture", 2D) = "white" {} } SubShader { Tags { "Queue"="Transparent" "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; sampler2D _MaskTex; fixed4 _Color; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); fixed4 mask = tex2D(_MaskTex, i.uv); // Alpha blending using the mask texture as a threshold col.a *= step(mask.r, 0.5); // For circular masks (0.5 alpha value) // Adjust for rectangular masks if needed (mask.r would be different) return lerp(col, fixed4(0,0,0,0), col.a) * _Color; // Blend with transparent color when alpha is low } ENDCG } } FallBack "Diffuse" } // To use for a circular mask: void DrawMesh(....., Material mat, int iVert, int iNumVertices, int iStartIndex, int iNumIndices) { mat.SetTexture("_MaskTex", yourCircularMaskTexture); ..... } // For a rectangular mask: void DrawMesh(....., Material mat, int iVert, int iNumVertices, int iStartIndex, int iNumIndices) { mat.SetTexture("_MaskTex", yourRectangularMaskTexture); ..... } ``` 在这个例子,你需要提供两个纹理贴图,一个是主颜色纹理 `_MainTex`,另一个是镂空掩码纹理 `_MaskTex`。`step`函数用于圆形遮罩,当像素值低于0.5(对于256色深度的图像,0.5对应半透明)时,将其alpha值设为0,达到镂空效果
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆敲代码的小Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值