Я пытался заставить своих врагов двигаться, используя проект A * Pathfinding (следующий
Учебник Брэкси, который можно найти здесь ).
В моем Start()
методе я использую InvokeRepeating("GeneratePath", 0f, .5f);
void GeneratePath()
{
if (seeker.IsDone())
seeker.StartPath(rb.position, Game.currentPlayer.GetComponent<Rigidbody2D>().position, OnPathComplete);
}
Тогда:
void OnPathComplete(Path p)
{
if (!p.error)
{
path = p;
currentWayPoint = 0;
}
}
Обратите внимание, что моя переменная path
установлена.
В моем Update()
методе:
public void MoveAI()
{
if (Game.currentPlayer == null || path == null) return;
if (currentWayPoint >= path.vectorPath.Count)
{
reachEndOfPath = true;
return;
}
else
{
reachEndOfPath = false;
}
Vector2 dir = ((Vector2)path.vectorPath[currentWayPoint] - rb.position).normalized;
Vector2 force = dir * speed * Time.deltaTime;
rb.AddForce(force);
float distance = Vector2.Distance(transform.position, path.vectorPath[currentWayPoint]);
if (distance < nextWaypointDistance)
currentWayPoint++;
}
Поскольку это мой Update()
метод, мои враги должны двигаться.
Но они этого не делают.
Я установил точку останова и подтвердил, что path
действительно равен нулю.
Как же? Я уже установил его.
Редактировать: я сдвинул два
path = p;
currentWayPoint = 0;
вне оператора if (чтобы увидеть, была ли проблема p.error
), а path
по-прежнему равно нулю.