private void UpdateState() { switch (currentState) { case NPCState.Patrol: if (IsPlayerInRange()) { currentState = NPCState.Attack; // 玩家进入范围切换攻击状态 ChasePlayer(); } break; // 其他状态逻辑... } } ``` 核心机制包括`巡逻路径点Waypoint导航`与`仇恨值Aggro判定`,例如通过导航组件实现路径跟随: ```csharp private IEnumerator PatrolRoutine() { foreach (var point in patrolPoints) { agent.SetDestination(point.position); yield return new WaitUntil(() => agent.remainingDistance < 0.5f); } } ```
三、对话与交互模块 交互系统通过事件触发与对话树实现。当玩家触发交互如点击NPC,代码调用对话管理器: ```csharp public void OnInteract(Player player) { if (dialogueId > 0) { DialogueManager.Instance.ShowDialogue(dialogueId, player); } } ``` 对话内容存储于数据库,代码通过`对话分支逻辑`动态选择文本: ```csharp public class DialogueNode { public int nodeId; public string text; public List// 示例:根据玩家任务进度返回不同对话 public string GetDynamicText(Player player) { return player.HasQuest(questId) ? "任务已接,快去成!" : "是否接受任务?"; } ```
四、战斗与AI配置 战斗型NPC需集成技能释放与AI决策逻辑。技能系统通过配置表定义技能ID、冷却时间,代码控制释放时机: ```csharp private void UpdateCombat() { if (IsSkillReady(skillId) && CanCastSkill(target)) { CastSkill(skillId); StartCoroutine(CoolDownTimer(skillCooldown)); } } ``` 高级AI则引入`行为权重算法`,例如根据血量百分比选择防御或进攻策略: ```csharp private float GetDefenseWeight() { return (currentHP / maxHP) < 0.3f ? 0.8f : 0.2f; // 血量低时优先防御 } ```通过上述模块的协同,网金NPC实现了从基础存在到复杂交互的整逻辑。代码设计需兼顾可扩展性如配置表与逻辑分离与性能优化如状态机帧率控制,以支撑开放世界中高密度NPC的稳定运行。
