Не срабатывает Invoke()
Всем привет! Идея в том что объект двигается к точке, когда доходит до нее, то засыпает на NPCStats.WaitTime - эта переменная типа float в другом классе. После того как он поспит то переходит к движению к следующей рандомной точке.
public class NPCMove : MonoBehaviour
{
public NPCStats NPCStats;
private Transform FinishPoint;
private float Distance;
[SerializeField] private Transform NPC;
private int NPCDecision;
public GameObject[] Points = new GameObject[24];
private void Start()
{
Points = GameObject.FindGameObjectsWithTag("Point");
//NPCDecision = Random.Range(0, 1);
NPCDecision = 0;
FindPoint();
Debug.Log("Старт");
}
private void FixedUpdate()
{
if (NPC.position != FinishPoint.position)
{
NPC.position = Vector3.MoveTowards(NPC.position, FinishPoint.position, Time.deltaTime * NPCStats.Speed /10);
//Debug.Log("Должен двигаться");
}
if (NPC.position == FinishPoint.position)
{
Debug.Log("Ушел думать");
NPCThink();
}
}
private void FindPoint()
{
FinishPoint = Points[Random.Range(0, 24)].transform;
Distance = Vector3.Distance(NPC.position, FinishPoint.position);
Debug.Log($"точка - {FinishPoint.position}");
}
private void NPCThink()
{
if (NPCDecision == 1)
{
Debug.Log("Принял решение двигаться");
GetPoint();
NPCDecision = 0;
}
if (NPCDecision == 0)
{
Debug.Log("Принял решение отдохнуть");
Sleep();
NPCDecision = 1;
}
}
private void Sleep()
{
Invoke("NPCThink", 5f);
Debug.Log("Отдохнул");
}
private void GetPoint()
{
FindPoint();
if (Distance > NPCStats.Radius)
{
Debug.Log("Ищет другую точку");
GetPoint();
}
}
}