Files
2026-02-21 16:45:37 +08:00

65 lines
1.6 KiB
C#

using UnityEngine;
namespace LS_LevelStreaming
{
public class LS_DistanceTrigger : LS_ITrigger
{
private int m_updateFrequency;
private Transform m_playerOrCameraTransform;
private Transform m_triggeredObjectTransform;
private float m_spawnDistance;
private float m_despawnDistance;
private bool m_isVisible;
private int m_updateCounter;
public LS_DistanceTrigger(int p_updateFrequency, Transform p_playerOrCameraTransform, Transform p_triggeredObjectTransform, float p_spawnDistance, float p_despawnDistance)
{
m_updateFrequency = p_updateFrequency;
if (m_updateFrequency > 0)
{
m_updateCounter = Random.Range(0, m_updateFrequency);
}
m_playerOrCameraTransform = p_playerOrCameraTransform;
m_triggeredObjectTransform = p_triggeredObjectTransform;
m_spawnDistance = p_spawnDistance;
m_despawnDistance = p_despawnDistance;
if (m_triggeredObjectTransform != null)
{
m_isVisible = m_triggeredObjectTransform.gameObject.activeSelf;
}
}
bool LS_ITrigger.IsVisible()
{
if (m_updateCounter <= 0)
{
m_updateCounter = m_updateFrequency;
if (m_playerOrCameraTransform != null && m_triggeredObjectTransform != null)
{
m_isVisible = m_triggeredObjectTransform.gameObject.activeSelf;
float magnitude = (m_playerOrCameraTransform.position - m_triggeredObjectTransform.position).magnitude;
if (m_spawnDistance >= magnitude)
{
m_isVisible = true;
}
else if (m_despawnDistance <= magnitude)
{
m_isVisible = false;
}
}
}
else
{
m_updateCounter--;
}
return m_isVisible;
}
}
}