unity中基于NGUI实现一张图片上在某个地方挖个洞
来源:互联网 发布:iphone软件怎么做 编辑:程序博客网 时间:2024/04/23 19:48
按照策划的要求,引导时只有被引导的图片是高亮的,其余地方都是黑色半透明,如下图所示:
对应的实现shader如下:
Shader "Unlit/TutorialBg"{Properties{_MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}_ClipRange0 ("Clip Vector", Vector) = (0.0, 0.0, 1.0, 1.0)// (x, y, z, w)}SubShader{LOD 200Tags{"Queue" = "Transparent""IgnoreProjector" = "True""RenderType" = "Transparent"}Pass{Cull OffLighting OffZWrite OffFog { Mode Off }Offset -1, -1Blend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _MainTex;float4 _ClipRange0;float2 _ClipArgs0 = float2(1000.0, 1000.0);struct appdata_t{float4 vertex : POSITION;float2 texcoord : TEXCOORD0;fixed4 color : COLOR;};struct v2f{float4 vertex : SV_POSITION;half2 texcoord : TEXCOORD0;fixed4 color : COLOR;float2 worldPos : TEXCOORD1;};v2f o;v2f vert (appdata_t v){o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);o.texcoord = v.texcoord;o.color = v.color;o.worldPos = v.vertex.xy * _ClipRange0.zw + _ClipRange0.xy;return o;}half4 frag (v2f IN) : COLOR{float2 factor = abs(IN.worldPos);half4 col = tex2D(_MainTex, IN.texcoord) * IN.color;;if(floor(factor.x) == 0 && floor(factor.y) == 0) {col.a = 0;}return col;}ENDCG}}SubShader{LOD 100Tags{"Queue" = "Transparent""IgnoreProjector" = "True""RenderType" = "Transparent"}Pass{Cull OffLighting OffZWrite OffFog { Mode Off }Offset -1, -1ColorMask RGBBlend SrcAlpha OneMinusSrcAlphaColorMaterial AmbientAndDiffuseSetTexture [_MainTex]{Combine Texture * Primary}}}}
代码中需要调整透明区域的位置,通过下面的代码来调整:
private void updateBgClip() { Renderer bgRendere = background.GetComponent<Renderer>(); if(bgRendere == null) return; float width = 100; float height = 100; Vector3 worldPos = Vector3.zero; UIWidget spriteCompont = targetButton.GetComponent<UIWidget>(); if (spriteCompont != null) { background.SetActive(true); width = spriteCompont.width / 2f; height = spriteCompont.height / 2f; worldPos = targetButton.position; } else { //no ui widget. get collide bondry Collider col = targetButton.GetComponent<Collider>(); BoxCollider boxCollider = col as BoxCollider; if (boxCollider != null) { background.SetActive(true); worldPos = boxCollider.bounds.center; width = boxCollider.size.x/2f; height = boxCollider.size.y/2f; } } Vector3 localPos = bgRendere.transform.InverseTransformPoint(targetButton.position); bgRendere.material.SetVector("_ClipRange0", new Vector4(-localPos.x / width, -localPos.y / height, 1 / width, 1 / height)); }
0 0
- unity中基于NGUI实现一张图片上在某个地方挖个洞
- 在一张图片上实现截图功能
- 用NGUI显示图片鼠标点击的地方出现在屏幕上
- Unity基于NGUI实现拖拽功能
- Unity中判断一个点或一张图片是否在另一张图片区域内
- unity 中基于NGUI中实现引导,拦截玩家的点击动作
- 如何在对话框上显示一张图片
- 在SurfaceView上拖动一张小图片
- 将一张图片上传并且在某个div进行显示
- 显示图片实现上一张下一张功能
- JS简单实现图片上一张下一张操作
- 在一张图片的某个特定位置添加另外一张图片
- Unity-基于NGUI下的序列帧动画代码实现
- 使用 JAVASCRIPT在图片 某个地方 增加链接
- Unity中基于NGUI插件制作序列帧动画
- 在Unity中利用WinAPI实现在任何地方可以拖拽窗体
- 基于Boost方法的人脸检测(5):在一张图片中检测人脸
- C#在Unity中保存一张.png格式的图片
- CSS3 Flex布局 Flexbox的属性详解
- 制作ISO映像文件,U盘启动安装
- java到底是值传递还是引用传递
- Microsoft Lync server 2013 企业即时通讯软件
- 第一范式,第二范式,第三范式
- unity中基于NGUI实现一张图片上在某个地方挖个洞
- 给freestdf添加STR和PSR的支持
- UITableViewCell显示动画
- iOS应用架构谈 view层的组织和调用方案
- 栈实验之进制转换
- Oracle 11g服务器安装详细步骤——图文教程
- 文件后缀名批量重命名
- How to: Implement CopyToDataTable<T> Where the Generic Type T Is Not a DataRow
- 线程池的简单实现