人工智能
AI 在 nanos world 中如何运作
每个在没有被 Player 占有的情况下生成的 Character 或 CharacterSimple,都将自动被一个 AI 控制器占有。这意味着你可以使用诸如 :MoveTo() 和 :LookAt() 等角色方法。
在 nanos world 中,AI 以及物理效果都是通过客户端进行分发计算并与其他玩家共享的(参考网络主控),这意味着 AI 只有在有玩家连接到服务器时才会工作。
信息
如果你在 NPC 上调用 :MoveTo() 且没有连接任何玩家,则它只有在有玩家加入服务器后才会开始行走。
移动 NPC
主要的 AI 方法在所有 Pawn(Character 和 CharacterSimple)中均可用:
:MoveTo()使 NPC 行走到某个位置。:Follow()使 NPC 持续跟随另一个 Actor。:StopMovement()停止当前移动。:SetAIAvoidanceSettings()使 NPC 在行走时互相避让。
当移动完成(或失败,例如没有可用路径)时,会触发 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。
