我正尝试使用A *寻路项目让敌人动弹(以下 Brackeys的教程,可以在here中找到。)
在我的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
仍然为空。