SceneEventNearAlpha.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using UnityGameFramework.Runtime;
  6. using UnityEngine.AI;
  7. /// <summary>
  8. /// 场景 传送点
  9. /// </summary>
  10. public class SceneEventNearAlpha : MonoBehaviour
  11. {
  12. Camera ca;
  13. /// <summary>
  14. /// 通用默认
  15. /// </summary>
  16. Material mat;
  17. /// <summary>
  18. /// 本身新的材质
  19. /// </summary>
  20. Material selfMat = null;
  21. MeshRenderer rend;
  22. bool isNear = false;
  23. float alpalDis = 21;
  24. public void Start()
  25. {
  26. ca = Camera.main;
  27. rend = this.GetComponent<MeshRenderer>();
  28. mat = rend.material;
  29. }
  30. void Update()
  31. {
  32. return;
  33. float dis = Vector3.Distance(this.transform.position, ca.transform.position);
  34. if (dis < alpalDis)
  35. {
  36. if(!isNear)
  37. {
  38. if (!selfMat)
  39. {
  40. selfMat = new Material(mat);
  41. MaterialRenderingMode.SetMaterialRenderingMode(selfMat, MaterialRenderingMode.RenderingMode.Fade);
  42. }
  43. rend.material = selfMat;
  44. isNear = true;
  45. }
  46. SetCmptAlpha(dis / alpalDis);
  47. }
  48. else
  49. {
  50. if (isNear)
  51. {
  52. rend.material = mat;
  53. isNear = false;
  54. }
  55. }
  56. }
  57. void SetCmptAlpha(float a)
  58. {
  59. selfMat.SetColor("_Color", new Color(1, 1, 1, a));//修改 Albedo 属性
  60. }
  61. }
  62. public class MaterialRenderingMode
  63. {
  64. public enum RenderingMode
  65. {
  66. Opaque,
  67. Cutout,
  68. Fade,
  69. Transparent
  70. }
  71. //设置材质的渲染模式
  72. static public void SetMaterialRenderingMode(Material material, RenderingMode renderingMode)
  73. {
  74. switch (renderingMode)
  75. {
  76. case RenderingMode.Opaque:
  77. material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
  78. material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
  79. material.SetInt("_ZWrite", 1);
  80. material.DisableKeyword("_ALPHATEST_ON");
  81. material.DisableKeyword("_ALPHABLEND_ON");
  82. material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
  83. material.renderQueue = -1;
  84. break;
  85. case RenderingMode.Cutout:
  86. material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
  87. material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
  88. material.SetInt("_ZWrite", 1);
  89. material.EnableKeyword("_ALPHATEST_ON");
  90. material.DisableKeyword("_ALPHABLEND_ON");
  91. material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
  92. material.renderQueue = 2450;
  93. break;
  94. case RenderingMode.Fade:
  95. material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
  96. material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
  97. material.SetInt("_ZWrite", 0);
  98. material.DisableKeyword("_ALPHATEST_ON");
  99. material.EnableKeyword("_ALPHABLEND_ON");
  100. material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
  101. material.renderQueue = 3000;
  102. break;
  103. case RenderingMode.Transparent:
  104. material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
  105. material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
  106. material.SetInt("_ZWrite", 0);
  107. material.DisableKeyword("_ALPHATEST_ON");
  108. material.DisableKeyword("_ALPHABLEND_ON");
  109. material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
  110. material.renderQueue = 3000;
  111. break;
  112. }
  113. }
  114. }