using FfalconXR.InputModule;
using System;
using UnityEngine;
using UnityEngine.EventSystems;
public class TextureLaserBeam : LaserBeam
{
public Texture m_normalImg;
public Texture m_hoverImg;
public Material m_textureMat;
///
/// 缩放倍率.
///
public float m_ImgScale = 2f;
private
protected new void Start()
{
base.Start();
if (m_LaserBeamDot == null)
{
return;
}
GameObject textureLaser = new GameObject("TextureLaser");
textureLaser.transform.SetParent(m_LaserBeamDot.parent);
textureLaser.transform.localPosition = Vector3.forward;//不然绘制不出来.
textureLaser.transform.localScale = Vector3.one;
textureLaser.transform.localRotation = Quaternion.Euler(0, 0, 0);
MeshRenderer mr = textureLaser.AddComponent();
mr.sortingOrder = m_SortingOrder;
MeshFilter mf = textureLaser.AddComponent();
m_textureMat.mainTexture = m_normalImg;
mr.material = m_textureMat;
//CreateReticleVertices(Init(m_SortingOrder));
CreateQuad(mf);
}
private void CreateQuad(MeshFilter mf)
{
Mesh mesh = new Mesh();
mf.mesh = mesh;
Vector3[] vertices = new Vector3[4];
vertices[0] = new Vector3(-1, -1, 0);
vertices[1] = new Vector3(-1, 1, 0);
vertices[2] = new Vector3(1, 1, 0);
vertices[3] = new Vector3(1, -1, 0);
int[] indices = new int[6];
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
indices[3] = 0;
indices[4] = 2;
indices[5] = 3;
mesh.vertices = vertices;
mesh.triangles = indices;
mesh.RecalculateBounds();
}
public override void OnPointerEnter(RaycastResult raycastResult, GameObject interactiveObj)
{
m_textureMat.mainTexture = m_hoverImg;
base.OnPointerEnter(raycastResult, interactiveObj);
}
public override void OnPointerExit(GameObject previousObject)
{
base.OnPointerExit(previousObject);
m_textureMat.mainTexture = m_normalImg;
}
private new void Update()
{
base.Update();
m_textureMat.SetFloat("_DistanceInMeters", m_Dis);
m_textureMat.SetFloat("_ScaleValue", m_OuterDiameter * m_Dis * m_ImgScale);
}
}