Прежде всего, вы не должны использовать static
public static bool isON;
для индивидуального значения! static
делает значение «неэкземплярным» значением, то есть оно принадлежит всему классу, а не экземплярам => Проще говоря, эта переменная является общей для всех ваших компонентов (см. этот пост * Дополнительная информация). Вместо этого используйте
public bool isON;
Чем получить доступ к переменной insteance компонента, например
Обновление: из комментариев я теперь знаю, что на самом деле компоненты находятся не на объекте коллайдера, а на дочернем объекте, к которому этот скрипт прикреплен
void OnTriggerEnter2D(Collider2D collision)
{
// Update. TODO check if the correct Object collided
//if(!collision.gameObject == <your player>)
if (!Once) return;
// Update this now searches in its own children instead of children of collision
var lightOnOff = GetComponentInChildren<LightOnOff>(true);
if(!lightOnOff)
{
Debug.Log("No LightOnOff found on collision" + collision.name, this);
return;
}
Debug.Log("It's true");
if (!LightOnOff.isON) return;
Debug.Log(" It's Lit");
Instantiate(Prefab1, Spawnpoint1.position, Spawnpoint1.rotation);
Instantiate(Prefab2, Spawnpoint2.position, Spawnpoint2.rotation);
Once = false;
}
Но вместо использования компонента LightOnOff
вы также можете просто получить доступ к компоненту Light
и сделать что-то вроде
Обновление: Из комментариев я теперь знаю, что на самом деле компоненты находятся не на объекте коллайдера, а на дочернем объекте, к которому этот скрипт прикреплен
void OnTriggerEnter2D(Collider2D collision)
{
if (!Once) return;
// directly access the Light
// Update this now searches in its own children instead of children of collision
var light = GetComponentInChildren<Light>(true);
if(!light)
{
Debug.Log("No Light found on collision" + collision.name, this);
return;
}
Debug.Log("It's true");
// Directly check if the Light component is enabled
if (!light.enabled) return;
Debug.Log(" It's Lit");
Instantiate(Prefab1, Spawnpoint1.position, Spawnpoint1.rotation);
Instantiate(Prefab2, Spawnpoint2.position, Spawnpoint2.rotation);
Once = false;
}