Есть два скрипта: Route.cs и Point.cs.
Route.cs цепляется к префабам с траекторией движения игрового объекта, состоящего из отдельных точек, на которые цепляются скрипты Point.cs и BoxCollider2D. Его задача - выдавать другому GameObject'у координаты точки, к которой необходимо стремиться.
Route.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Route : MonoBehaviour
{
[SerializeField] private GameObject[] points;
private int active_point = 0;
private GameObject[] test;
public Vector2 Target_cors()
{
if (!points[active_point].GetComponent<Point>().get_act())
{
print("Ehm?");
if (active_point + 1 == points.Length)
{
return new Vector2(512, 251); // для объекта движения это будет означать его уничтожение
}
active_point++;
}
return points[active_point].transform.position;
}
}
Point.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Point : MonoBehaviour
{
public bool active;
private void Start()
{
active = true;
}
public void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Enemy"))
{
active = false;
}
}
public bool get_act()
{
return active;
}
}
Проблема такова: Route.cs просто не видит изменений в Point.cs, нацепленном на, собственно, точку. В инспекторе (да и внутри скрипта Point.cs, если вызывать print'ы переменной active в Update() на Point'е, и даже если вызывать её через get_act() внутри Point.cs) спокойно видно, как переменная active становится false при сближении с ней. Но Route.cs продолжает получать из точки состояние active, какие манипуляции с кодом не проводи в Point.cs.
С чем это связано и как это можно починить? Грешу на какую-нибудь работу массивов или то, как работает GetComponent, но не уверен и не знаю как исправить.
Заранее благодарен за помощь.