这里提供两个脚本,一个绑在需要透明的物体上(AutoTransparen.cs),一个绑在PLayer身上(ClearSight.cs)。
以下是这两个脚本。
- usingUnityEngine;
- usingSystem.Collections;
- publicclassAutoTransparent:MonoBehaviour
- {
- privateShader m_OldShader =null;
- privateColor m_OldColor =Color.black;
- privatefloat m_Transparency =0.3f;
- privateconstfloat m_TargetTransparancy =0.3f;
- privateconstfloat m_FallOff =0.1f;// returns to 100% in 0.1 sec
- publicvoidBeTransparent()
- {
- // reset the transparency;
- m_Transparency = m_TargetTransparancy;
- if(m_OldShader ==null)
- {
- // Save the current shader
- m_OldShader = renderer.material.shader;
- m_OldColor = renderer.material.color;
- renderer.material.shader =Shader.Find("Transparent/Diffuse");
- }
- }
- voidUpdate()
- {
- if(m_Transparency <1.0f)
- {
- Color C = renderer.material.color;
- C.a = m_Transparency;
- renderer.material.color = C;
- }
- else
- {
- // Reset the shader
- renderer.material.shader = m_OldShader;
- renderer.material.color = m_OldColor;
- // And remove this script
- Destroy(this);
- }
- m_Transparency +=((1.0f-m_TargetTransparancy)*Time.deltaTime)/ m_FallOff;
- }
- }
- usingUnityEngine;
- usingSystem.Collections;
- publicclassClearSight:MonoBehaviour
- {
- publicfloatDistanceToPlayer=5.0f;
- voidUpdate()
- {
- RaycastHit[] hits;
- // you can also use CapsuleCastAll()
- // TODO: setup your layermask it improve performance and filter your hits.
- hits =Physics.RaycastAll(transform.position, transform.forward,DistanceToPlayer);
- foreach(RaycastHit hit in hits)
- {
- Renderer R = hit.collider.renderer;
- if(R ==null)
- continue;// no renderer attached? go to next hit
- // TODO: maybe implement here a check for GOs that should not be affected like the player
- AutoTransparent AT = R.GetComponent<AutoTransparent>();
- if(AT ==null)// if no script is attached, attach one
- {
- AT = R.gameObject.AddComponent<AutoTransparent>();
- }
- AT.BeTransparent();// get called every frame to reset the falloff
- }
- }
- }
参考:http://answers.unity3d.com/questions/44815/make-object-transparent-when-between-camera-and-pl.html