Unity 模型被建筑物遮挡处理(一)(将建筑物设为半透明)

阅读: 评论:0

Unity 模型被建筑物遮挡处理(一)(将建筑物设为半透明)

Unity 模型被建筑物遮挡处理(一)(将建筑物设为半透明)

当模型被建筑物遮挡的时候,如果要将建筑物设为半透明时可以这样处理:

一、检测是否有遮挡物

public class Player : MonoBehaviour
{List<Material> materials = new List<Material>();public void Update(){UpdateMaterials}//检测模型是否被遮挡private void UpdateMaterials(){RaycastHit rh;if (Physics.Linecast(Camera.main.position, transform.position, out rh, LayerMask.GetMask("Build"))){Material material = rh.transform.GetComponentInChildren<MeshRenderer>().materials[0];if (!materials.Contains(material)){materials.Add(material);}material.SetFloat("_Alpha", 0.3f);}else{materials.ForEach((temp) => { temp.SetFloat("_Alpha", 1); });materials.Clear();}}
}

二、设置模型Material的Shader

Shader "Unlit/BuildShader"
{Properties{[NoScaleoffset]_MainTex ("Texture", 2D) = "white" {}_Alpha("Alpha", Range(0, 1)) = 0.3}SubShader{Tags { "RenderType"="Opaque" }ZWrite OffBlend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment fragsampler2D _MainTex;float4 _MainTex_ST;float _Alpha;struct MeshData{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct Interpolator{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};Interpolator vert (MeshData v){Interpolator o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}float4 frag (Interpolator i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);return float4(col.x, col.y, col.z, _Alpha);}ENDCG}}
}

本文发布于:2024-02-01 22:16:19,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679697839778.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:建筑物   设为   遮挡   模型   Unity
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23