用途:在 Roblox 中实现 NPC 与敌人 AI,包括寻路、追逐/跟随、状态机与感知。
架构:NPC 逻辑放在服务端以保证权威性(目标、伤害、掉落),视觉表现可放客户端。用一个 NPC 服务以固定频率(如 5–10 Hz、错峰)统一驱动所有 NPC,而非每个 NPC 一个 while true 脚本;用 CollectionService 标记模型,状态存表。生成后调用 npc.PrimaryPart:SetNetworkOwner(nil) 让物理归服务端,避免抖动与被推。需要行走/跳跃/攀爬用 Humanoid,简单移动体用 AnimationController + Animator 配合约束或 CFrame。
寻路:使用 PathfindingService:CreatePath 与 path:ComputeAsync(FindPathAsync 已过时),按代理类型复用 Path 对象,ComputeAsync 会让出线程,不可每帧调用。参数含 AgentRadius、AgentHeight、AgentCanJump、AgentCanClimb、WaypointSpacing 与 Costs(按材质名或 PathfindingModifier.Label 设代价,math.huge 表示不可通行)。用 GetWaypoints 遍历,Jump 动作触发 humanoid.Jump,MoveTo 后等 MoveToFinished;连接 path.Blocked 处理障碍。追逐移动目标时,目标位移超过数 studs 或每约 0.5–1 秒重算,有视线(workspace:Raycast)时直接 MoveTo。PathfindingModifier 与 PathfindingLink 可塑造路径。限制:起终点直线距离 ≤ 3000 studs、20000 节点预算,远距离需中间目标;客户端只能看到已流入几何,寻路应在服务端计算。
行为:示例状态机含 Idle/Chase/Attack/Return,配合 AGGRO_RANGE、ATTACK_RANGE、LEASH_RANGE、ATTACK_COOLDOWN 与视线检测;复杂 AI 可用行为树或效用 AI,保持固定频率思考、小原语行动。
感知:用 workspace:GetPartBoundsInRadius 配合碰撞组过滤,或遍历 Players:GetPlayers() 比较平方距离;加入反应延迟与视野点积检查,错峰思考(npcIndex % 5 == frame % 5)。
相关技能:roblox-characters-animation、roblox-physics、roblox-performance、roblox-game-systems。