Unity 实用教程 之 实现类AR扫描全屏幕效果

 时间:2024-10-14 10:09:56

1、打开Unity,新建一个空工程,具体如下图

Unity 实用教程 之 实现类AR扫描全屏幕效果Unity 实用教程 之 实现类AR扫描全屏幕效果

4、Shader脚本具体代码如下图

Unity 实用教程 之 实现类AR扫描全屏幕效果Unity 实用教程 之 实现类AR扫描全屏幕效果

5、Shader脚本具体内容如下:Shader "Custom/S罕铞泱殳canEffect" 撑俯擂摔{ properties{ _MainTex("MainTex",2D)=""{} edgeColor("edge",Color)=(1,0,0,1) Range1("R",Range(0,5))=1 } Subshader{ pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag struct a2v{ float4 vertex:POSITION; float4 texcoord:TEXCOORD; }; struct v2f{ float4 pos:SV_POSITION; half2 uv[9]:TEXCOORD0; }; sampler2D _MainTex; float4 _MainTex_ST; float4 _MainTex_TexelSize; fixed4 edgeColor; float Range1; v2f vert(a2v v){ v2f o; o.pos=UnityObjectToClipPos(v.vertex); o.uv[0]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(-1,-1); o.uv[1]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(0,-1); o.uv[2]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(1,-1); o.uv[3]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(-1,0); o.uv[4]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(0,0); o.uv[5]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(1,0); o.uv[6]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(-1,-1); o.uv[7]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(0,-1); o.uv[8]=v.texcoord.xy+_MainTex_TexelSize.xy*half2(1,-1); return o; } fixed luminance(fixed4 c){ return 0.2125*c.r+0.7154*c.g+0.0721*c.b; } half Sobel(v2f x){ const half Gx[9]={ -1,-2,-1, 0,0,0, 1,2,1 }; const half Gy[9]={ -1,0,1, -2,0,2, -1,0,1 }; half edgeX=0; half edgeY=0; half t; for(int i=0;i<9;i++) { t=tex2D(_MainTex,x.uv[i]); edgeX+=t*Gx[i]; edgeY+=t*Gy[i]; } half edge=abs(edgeX)+abs(edgeY); return edge; } fixed4 frag(v2f i):SV_Target{ fixed4 col=fixed4(1,0,0,1); half2 v1=i.uv[4]; col=tex2D(_MainTex,v1); half d=Sobel(i); if(d>Range1) { if(abs(v1.y-frac(_Time.y))<0.05) { col=lerp(col,edgeColor,d); } } return col; } ENDCG } }}

6、编译正确,回到Unity界面,新建一个材质 Material,命名为 ScanScreen,shader选择之前刚建的Shader,具体如下图

Unity 实用教程 之 实现类AR扫描全屏幕效果

8、脚本的具体代码如下图

Unity 实用教程 之 实现类AR扫描全屏幕效果

9、脚本的具体内容如下:using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class ScanScreenEffect : MonoBehaviour { [SerializeField] private RawImage webRawImage; public Material ma; void Start() { StartCoroutine(startOpenCamera()); } IEnumerator startOpenCamera() { yield return Application.RequestUserAuthorization(UserAuthorization.WebCam); if (Application.HasUserAuthorization(UserAuthorization.WebCam)) { WebCamTexture wbt = new WebCamTexture(); WebCamDevice[] devices = WebCamTexture.devices; string _deviceName = ""; if (devices.Length >= 1) { _deviceName = devices[0].name; } wbt.name = _deviceName; webRawImage.texture = wbt; wbt.Play(); } } void OnRenderImage(RenderTexture src, RenderTexture dest) { if (ma != null) { Graphics.Blit(src, dest, ma); } else { Graphics.Blit(src, dest); } }}

10、脚本编译正确,回到Unity界面,挂载脚本到 Main Camera,把 RawImage 和 ScanScreen材质赋值给脚本,具体如下图

Unity 实用教程 之 实现类AR扫描全屏幕效果

12、打包编译,打开应用,结果具体如下图

Unity 实用教程 之 实现类AR扫描全屏幕效果

13、到此,《Unity 实用教程 之 实现类AR扫描全屏幕效果》讲解结束,谢谢

  • c4d声音效果器教程
  • ae如何保留所有图层属性并进行移动
  • 如何使用AE制作竖排渐现文字动画
  • 怎么使用ae制作旋转动画
  • pr触动和写入的区别
  • 热门搜索
    长白山冬季旅游攻略 四川色达旅游 重庆到武隆旅游攻略 旅游ppt背景图片 旅游作文400字 广东旅游景点推荐 郎木寺旅游攻略 斯里兰卡旅游报价 温州有什么旅游景点 江西三清山旅游