unity3d : 使摄像机和玩家之间的阻挡物体透明

这里提供两个脚本,一个绑在需要透明的物体上(AutoTransparen.cs),一个绑在PLayer身上(ClearSight.cs)。

 

以下是这两个脚本。

 

  1. usingUnityEngine;
  2. usingSystem.Collections;
  3.  
  4. publicclassAutoTransparent:MonoBehaviour
  5. {
  6. privateShader m_OldShader =null;
  7. privateColor m_OldColor =Color.black;
  8. privatefloat m_Transparency =0.3f;
  9. privateconstfloat m_TargetTransparancy =0.3f;
  10. privateconstfloat m_FallOff =0.1f;// returns to 100% in 0.1 sec
  11.  
  12. publicvoidBeTransparent()
  13. {
  14. // reset the transparency;
  15. m_Transparency = m_TargetTransparancy;
  16. if(m_OldShader ==null)
  17. {
  18. // Save the current shader
  19. m_OldShader = renderer.material.shader;
  20. m_OldColor = renderer.material.color;
  21. renderer.material.shader =Shader.Find("Transparent/Diffuse");
  22. }
  23. }
  24. voidUpdate()
  25. {
  26. if(m_Transparency <1.0f)
  27. {
  28. Color C = renderer.material.color;
  29. C.a = m_Transparency;
  30. renderer.material.color = C;
  31. }
  32. else
  33. {
  34. // Reset the shader
  35. renderer.material.shader = m_OldShader;
  36. renderer.material.color = m_OldColor;
  37. // And remove this script
  38. Destroy(this);
  39. }
  40. m_Transparency +=((1.0f-m_TargetTransparancy)*Time.deltaTime)/ m_FallOff;
  41. }
  42. }

 

  1. usingUnityEngine;
  2. usingSystem.Collections;
  3.  
  4. publicclassClearSight:MonoBehaviour
  5. {
  6. publicfloatDistanceToPlayer=5.0f;
  7. voidUpdate()
  8. {
  9. RaycastHit[] hits;
  10. // you can also use CapsuleCastAll()
  11. // TODO: setup your layermask it improve performance and filter your hits.
  12. hits =Physics.RaycastAll(transform.position, transform.forward,DistanceToPlayer);
  13. foreach(RaycastHit hit in hits)
  14. {
  15. Renderer R = hit.collider.renderer;
  16. if(R ==null)
  17. continue;// no renderer attached? go to next hit
  18. // TODO: maybe implement here a check for GOs that should not be affected like the player
  19.  
  20. AutoTransparent AT = R.GetComponent<AutoTransparent>();
  21. if(AT ==null)// if no script is attached, attach one
  22. {
  23. AT = R.gameObject.AddComponent<AutoTransparent>();
  24. }
  25. AT.BeTransparent();// get called every frame to reset the falloff
  26. }
  27. }
  28. }

 

参考:http://answers.unity3d.com/questions/44815/make-object-transparent-when-between-camera-and-pl.html

转载于:https://www.cnblogs.com/geoffyange/archive/2013/05/31/3110111.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值