Первый: вместо использования Update
вы скорее хотите, чтобы он был управляемым событиями, и это позволит избежать ненужных вызовов Update
, когда ничего не изменилось.
Тогда, как уже упоминалось в комментарии, то, что вы сейчас делаете включите свет, если игрок касается, отключите его, если что-то еще касается.
Вы скорее хотите отключить его, когда игрок больше не касается и игнорировать все остальное.
Просто сделайте
public Light ceilingLight;
// optionally additionally configure whether the light should start enabled or not
public bool InitiallyEnabled;
private void Start()
{
ceilingLight.enabled = InitiallyEnabled;
}
private void OnTriggerEnter(Collider other)
{
if(!other.CompareTag("Player")) return;
ceilingLight.enabled = true;
}
private void OnTriggerExit(Collider other)
{
if(!other.CompareTag("Player")) return;
ceilingLight.enabled = false;
}
В качестве альтернативы вы также можете использовать его в качестве переключателя, например
private void OnTriggerEnter(Collider other)
{
if(!other.CompareTag("Player")) return;
ceilingLight.enabled = ! ceilingLight.enabled;
}
, поэтому при каждом касании игрок будет переключать состояние освещения, не нажимая его постоянно.