Files
Fishing2/Assets/VolumetricLightBeam/Scripts/BeamGeometryAbstractBase.cs
2025-05-16 23:31:59 +08:00

67 lines
1.7 KiB
C#

using UnityEngine;
namespace VLB
{
public abstract class BeamGeometryAbstractBase : MonoBehaviour
{
public MeshRenderer meshRenderer { get; protected set; }
public MeshFilter meshFilter { get; protected set; }
public Mesh coneMesh { get; protected set; }
protected Matrix4x4 m_ColorGradientMatrix;
protected Material m_CustomMaterial = null;
protected abstract VolumetricLightBeamAbstractBase GetMaster();
void Start()
{
DestroyOrphanBeamGeom(); // Handle copy / paste the LightBeam in Editor
}
void OnDestroy()
{
if (m_CustomMaterial)
{
DestroyImmediate(m_CustomMaterial);
m_CustomMaterial = null;
}
}
void DestroyOrphanBeamGeom()
{
var master = GetMaster();
if(master)
{
var beamGeom = master.GetBeamGeometry();
if(beamGeom == this)
{
// do not destroy me only if I have a master, and this master knows me as its beam geom
return;
}
}
DestroyBeamGeometryGameObject(this);
}
public static void DestroyBeamGeometryGameObject(BeamGeometryAbstractBase beamGeom)
{
if (beamGeom)
DestroyImmediate(beamGeom.gameObject);
}
#if UNITY_EDITOR
void Update()
{
if (!Application.isPlaying)
{
DestroyOrphanBeamGeom();
}
}
public bool _EDITOR_IsUsingCustomMaterial { get { return m_CustomMaterial != null; } }
#endif
}
}