跳至正文
版本:bleeding-edge 🩸

人工智能

AI 在 nanos world 中如何运作

每个在没有被 Player 占有的情况下生成的 Character 或 CharacterSimple,都将自动被一个 AI 控制器占有。这意味着你可以使用诸如 :MoveTo() 和 :LookAt() 等角色方法。

在 nanos world 中,AI 以及物理效果都是通过客户端进行分发计算并与其他玩家共享的(参考网络主控),这意味着 AI 只有在有玩家连接到服务器时才会工作。

信息

如果你在 NPC 上调用 :MoveTo() 且没有连接任何玩家,则它只有在有玩家加入服务器后才会开始行走。

移动 NPC​

主要的 AI 方法在所有 Pawn(Character 和 CharacterSimple)中均可用:

当移动完成(或失败,例如没有可用路径)时,会触发 MoveComplete 事件:

Server/Index.lua
-- 生成一个 NPC(未被任何 Player 附身的 Character)
local npc = Character(Vector(0, 0, 100), Rotator(), "nanos-world::SK_Male")

-- 使其行走到某个位置,当距离目标 50 个单位时即视为到达
npc:MoveTo(Vector(1000, 0, 100), 50)

npc:Subscribe("MoveComplete", function(self, succeeded)
if (succeeded) then
Console.Log("NPC 到达!")
else
Console.Log("NPC 找不到路!")
end
end)

要查找 NPC 可以行走到的点,客户端 Navigation 静态类提供了诸如 Navigation.GetRandomReachablePointInRadius() 和 Navigation.FindPathToLocation() 等方法。

为了让 NPC 计算出要行走的路径,地图需要配置 NavMesh。