TextureLaserBeam.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using FfalconXR.InputModule;
  2. using System;
  3. using UnityEngine;
  4. using UnityEngine.EventSystems;
  5. public class TextureLaserBeam : LaserBeam
  6. {
  7. public Texture m_normalImg;
  8. public Texture m_hoverImg;
  9. public Material m_textureMat;
  10. /// <summary>
  11. /// 缩放倍率.
  12. /// </summary>
  13. public float m_ImgScale = 2f;
  14. private
  15. protected new void Start()
  16. {
  17. base.Start();
  18. if (m_LaserBeamDot == null)
  19. {
  20. return;
  21. }
  22. GameObject textureLaser = new GameObject("TextureLaser");
  23. textureLaser.transform.SetParent(m_LaserBeamDot.parent);
  24. textureLaser.transform.localPosition = Vector3.forward;//不然绘制不出来.
  25. textureLaser.transform.localScale = Vector3.one;
  26. textureLaser.transform.localRotation = Quaternion.Euler(0, 0, 0);
  27. MeshRenderer mr = textureLaser.AddComponent<MeshRenderer>();
  28. mr.sortingOrder = m_SortingOrder;
  29. MeshFilter mf = textureLaser.AddComponent<MeshFilter>();
  30. m_textureMat.mainTexture = m_normalImg;
  31. mr.material = m_textureMat;
  32. //CreateReticleVertices(Init(m_SortingOrder));
  33. CreateQuad(mf);
  34. }
  35. private void CreateQuad(MeshFilter mf)
  36. {
  37. Mesh mesh = new Mesh();
  38. mf.mesh = mesh;
  39. Vector3[] vertices = new Vector3[4];
  40. vertices[0] = new Vector3(-1, -1, 0);
  41. vertices[1] = new Vector3(-1, 1, 0);
  42. vertices[2] = new Vector3(1, 1, 0);
  43. vertices[3] = new Vector3(1, -1, 0);
  44. int[] indices = new int[6];
  45. indices[0] = 0;
  46. indices[1] = 1;
  47. indices[2] = 2;
  48. indices[3] = 0;
  49. indices[4] = 2;
  50. indices[5] = 3;
  51. mesh.vertices = vertices;
  52. mesh.triangles = indices;
  53. mesh.RecalculateBounds();
  54. }
  55. public override void OnPointerEnter(RaycastResult raycastResult, GameObject interactiveObj)
  56. {
  57. m_textureMat.mainTexture = m_hoverImg;
  58. base.OnPointerEnter(raycastResult, interactiveObj);
  59. }
  60. public override void OnPointerExit(GameObject previousObject)
  61. {
  62. base.OnPointerExit(previousObject);
  63. m_textureMat.mainTexture = m_normalImg;
  64. }
  65. private new void Update()
  66. {
  67. base.Update();
  68. m_textureMat.SetFloat("_DistanceInMeters", m_Dis);
  69. m_textureMat.SetFloat("_ScaleValue", m_OuterDiameter * m_Dis * m_ImgScale);
  70. }
  71. }