【发布时间】:2019-02-16 17:04:44
【问题描述】:
我在为我的 NPC 设置 AI 时遇到了麻烦。我希望它在我地图上的随机点周围走动,并在玩家靠近时逃离玩家。当我追逐我的 npc 时,逃跑很糟糕,但是当我停下来时,它们会向玩家反弹和向后反弹,而不是仅仅设置另一个目的地......
这是代码。我将 runToRandomLocation() 放在 Update() 方法中。
void runAway()
{
if (!isDead)
{
transform.position = Vector2.MoveTowards(transform.position, player.transform.position, -movementSpeed * 1.5f * Time.deltaTime);
}
}
void runToRandomLocation()
{
if (!isDead) {
if (Vector2.Distance(transform.position, player.transform.position) > 3) // if player is not near
{
if (Vector2.Distance(transform.position, randomDestination) <= 2) // when NPC is close to destination he sets another
{
randomDestination = new Vector2(Random.Range(-11, 11), Random.Range(-5, 5));
}
else
{
transform.position = Vector2.MoveTowards(transform.position, randomDestination, movementSpeed * Time.deltaTime); // NPC is just walking from point to point
}
}
else
{
runAway(); // if player is near
}
}
}
【问题讨论】:
-
您确实需要一个状态机,但您设置随机目标(第一个 if)的代码实际上并没有对该目标执行任何操作。它不会移动任何东西。
标签: c# unity3d artificial-intelligence