当前位置:   article > 正文

Unity如何改变材质的Rendering Mode_unity修改材质球的renderingmode

unity修改材质球的renderingmode

我们在使用Unity开发的过程中,时常要使得材质有时候变透明,有时候不透明,在属性面板中直接把材质设置成Cutout或Transparent模式又时常能看到物体的背面,效果很不理想,但是通过以下脚本可以动态改变材质的Rendering Mode。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class MaterialModify : MonoBehaviour
  5. {
  6. public enum RenderingMode
  7. {
  8. Opaque,
  9. Cutout,
  10. Fade,
  11. Transparent,
  12. }
  13. public static void SetMaterialRenderingMode(Material material, RenderingMode renderingMode)
  14. {
  15. switch (renderingMode)
  16. {
  17. case RenderingMode.Opaque:
  18. material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
  19. material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
  20. material.SetInt("_ZWrite", 1);
  21. material.DisableKeyword("_ALPHATEST_ON");
  22. material.DisableKeyword("_ALPHABLEND_ON");
  23. material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
  24. material.renderQueue = -1;
  25. break;
  26. case RenderingMode.Cutout:
  27. material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
  28. material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
  29. material.SetInt("_ZWrite", 1);
  30. material.EnableKeyword("_ALPHATEST_ON");
  31. material.DisableKeyword("_ALPHABLEND_ON");
  32. material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
  33. material.renderQueue = 2450;
  34. break;
  35. case RenderingMode.Fade:
  36. material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
  37. material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
  38. material.SetInt("_ZWrite", 0);
  39. material.DisableKeyword("_ALPHATEST_ON");
  40. material.EnableKeyword("_ALPHABLEND_ON");
  41. material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
  42. material.renderQueue = 3000;
  43. break;
  44. case RenderingMode.Transparent:
  45. material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
  46. material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
  47. material.SetInt("_ZWrite", 0);
  48. material.DisableKeyword("_ALPHATEST_ON");
  49. material.DisableKeyword("_ALPHABLEND_ON");
  50. material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
  51. material.renderQueue = 3000;
  52. break;
  53. }
  54. }
  55. }

这样,只需要调用MaterialModify中的方法“SetMaterialRenderingMode”就可以动态修改材质的Rendering Mode了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/82162?site
推荐阅读
相关标签
  

闽ICP备14008679号