ReGoap
ReGoap 是一个通用的 C# 目标导向行动规划(GOAP)库,专为游戏开发设计,并提供了丰富的 Unity3D 示例与辅助类。它旨在解决游戏中非玩家角色(NPC)的行为决策难题,让 AI 能够根据当前环境状态,自动推演出一系列合理的动作序列以达成特定目标,从而摆脱传统有限状态机在复杂逻辑下难以维护的困境。
该工具非常适合游戏开发者、AI 程序员以及希望提升 NPC 智能表现的设计师使用。无论是制作策略游戏中的单位调度,还是角色扮演游戏中敌人的战术反应,ReGoap 都能提供灵活的支持。其核心亮点在于高度的通用性:虽然内置了 Unity 集成方案,但若移除相关文件夹,它可无缝运行于任何支持 C# 的游戏引擎或项目中。
ReGoap 将世界抽象为“状态”,将行为定义为带有“前置条件”和“执行效果”的动作。通过传感器实时感知环境,AI 代理能动态规划出如“靠近敌人”、“装备武器”或“发动攻击”等连贯行为链。这种架构不仅让行为逻辑更加清晰易懂,还极大地增强了角色的自适应能力,是构建高智能游戏 AI 的得力助手。
使用场景
在开发一款潜行策略游戏时,开发者需要让敌方 NPC 根据玩家动态行为(如是否被发现、是否有武器)自主规划巡逻、警戒或攻击等行为。
没有 ReGoap 时
- 逻辑硬编码严重:开发者需用大量嵌套的
if-else或状态机手动编写每种情境下的行为跳转,代码臃肿且难以维护。 - 行为缺乏灵活性:若玩家突然扔掉武器逃跑,NPC 往往无法动态调整战术,只能机械执行预设脚本,显得呆板。
- 扩展成本极高:每新增一种交互动作(如“呼叫支援”),都需要重新梳理所有状态流转逻辑,极易引发连锁 Bug。
- 调试困难:当 NPC 做出错误决策时,难以追溯是哪一段条件判断导致了逻辑死锁或无效循环。
使用 ReGoap 后
- 声明式规划替代硬编码:只需定义动作的“前置条件”(如需持有武器)和“效果”(如敌人受伤),ReGoap 自动计算达成目标的最佳行动序列。
- 动态适应战场变化:当玩家状态改变(如从“有武器”变为“无武器”),系统会实时重新规划路径,让 NPC 自然切换为“近身搏斗”或“报警”。
- 低成本扩展行为库:新增“呼叫支援”动作仅需配置其前后置状态,无需修改现有逻辑,系统自动将其纳入可选策略池。
- 可视化调试支持:利用内置的调试工具,开发者可直观查看当前世界状态与规划路径,快速定位决策异常原因。
ReGoap 将复杂的 AI 决策转化为可配置的数据驱动模型,让游戏角色真正具备“思考”能力而非机械反应。
运行环境要求
- Windows
- macOS
- Linux
未说明
未说明

快速开始
ReGoap
通用的 C# GOAP(目标导向行动规划)库,附带 Unity3D 示例和辅助类。
该库非常通用;如果不包含 Unity 文件夹,您可以在任何游戏引擎中使用它。
快速入门
首先查看这里的 Unity FSM 示例。
此示例在 Unity 中使用 ReGoap 库,并结合一个简单的有限状态机(FSM)来处理宏观行为逻辑(大多数游戏中,三个 FSM 状态就足够了:空闲、移动到目标、播放动画)。
要使用它,请创建一个新的 Unity 项目,打开项目文件夹,进入 Assets 目录,并将整个仓库克隆到该目录中:
git clone https://github.com/luxkun/ReGoap.git
(在 Windows 上,您也可以通过命令行或任何 Git 客户端完成相同的操作,或者直接点击“克隆或下载”然后选择“下载 ZIP 文件”)
此外,您也可以直接下载最新版本的 Unity 包,不过其中可能不包含最新的更改,下载链接为这里,或在Unity 资源商店获取。
详细入门
GOAP 简介
(如果您只想使用该库并希望先了解示例,请跳至 如何使用 ReGoap)
在介绍如何在您的游戏中使用此库之前,让我先解释一下 GOAP 系统的工作原理。引用 Jeff Orkin 的话:
目标导向行动规划(简称 GOAP,与 soap 押韵)是一种简化的 STRIPS 类规划架构,专为游戏中自主角色行为的实时控制而设计。
简单来说,它的作用就是找到一个行动计划(一系列动作),以实现所选目标的要求。
您需要理解的主要概念包括:状态、动作、目标、记忆 和 传感器。
状态
是世界的一种描述,在本库中,状态被表示为字符串到对象的字典(Dictionary<string, object>)。
请参阅此文件中的 ReGoapState 类:https://github.com/luxkun/ReGoap/blob/master/ReGoap/Core/ReGoapState.cs
示例:'isAt': 'enemy', 'isWarned': true, 'hasWeapon': true
动作
可以定义为一组前提条件和效果,这些就是智能体(AI 角色,以下简称“智能体”)可以执行的动作。
前提条件是指执行该动作所需的条件,用状态来描述;而效果则是动作产生的结果,同样用状态来描述。
示例:
- ‘开门’:[前提:{'nearDoor': true, 'doorUnlocked': true},效果:{'doorOpened': true}]
- ‘近战攻击’:[前提:{'weaponEquipped': true, 'isAt': 'enemy'},效果:{'hurtEnemy' true}]
- ‘前往敌人’:[前提:{'enemyInLoS': true, 'canMove': true},效果:{'isAt': 'enemy'}]
- ‘装备武器’:[前提:{'hasWeapon': true},效果:{'weaponEquipped': true}]
- ‘巡逻’:[前提:{'canMove': true},效果:{'isPatrolling': true}]
重要提示:不支持假的前提条件。 重要提示:动作完成后,其效果不会自动写入记忆中。这是有意为之的行为,因为在大多数游戏中,您通常会希望通过记忆或传感器来设置这些变量。如果您需要,可以在自定义的 ReGoapAction 中重写 Exit 方法,手动将效果写入记忆中,具体示例如下。
目标
可以定义为一组要求,用状态来描述,这基本上就是智能体应该完成的任务。
示例:
- ‘击杀敌人’:{'hurtEnemy': true}
- ‘巡逻’:{'isPatrolling': true}
记忆
是智能体的记忆,智能体所知道和感知的一切都应存储在这里。记忆还可以包含多个传感器,这些传感器在本库中作为记忆的辅助工具。记忆的主要职责是构建并持续更新“世界”状态。
传感器
是记忆的辅助工具,负责处理特定范围内的信息。
示例:
- 视线传感器(检测是否有敌人在视野内)
- 听觉传感器(检测是否听到敌人的声音,当然您也可以创建一个综合的敌人传感器,同时包含视线传感器和听觉传感器)
现在您应该已经了解了 GOAP 库的作用以及适用场景。如果您仍有疑问或想进一步深入了解这一领域,建议阅读 Jeff Orkin 的相关论文:http://alumni.media.mit.edu/~jorkin/
如何在 Unity3D 中使用 ReGoap
- 在你的 Unity 项目中克隆此仓库。 命令行:
git clone https://github.com/luxkun/ReGoap.git
- 为你的智能体创建一个 GameObject。
- 添加一个 ReGoapAgent 组件,并为其命名(你需要创建一个继承自 ReGoapAgent 或实现 IReGoapAgent 接口的类)。
- 添加一个 ReGoapMemory 组件,并为其命名(你需要创建一个继承自 ReGoapMemory 或实现 IReGoapMemory 接口的类)。
- [可选 | 根据需要重复] 添加你自己的传感器类,该类应继承 ReGoapSensor 或实现 IReGoapSensor 接口。
- [根据需要重复] 添加你自己的类,该类应继承 ReGoapAction 或实现 IReGoapAction 接口(请谨慎选择该行动应具备的前提条件和效果),并通过重写 Run 函数来实现行动逻辑。此函数将由 ReGoapAgent 调用。
- [根据需要重复] 添加你自己的类,该类应继承 ReGoapGoal 或实现 IReGoapGoal 接口(请明智地选择目标状态)。
- 在任意 GameObject 上(不要放在智能体上!)添加一个 ReGoapPlannerManager(你需要创建一个继承自 ReGoapPlannerManager 的类),它将负责所有的规划工作。
- 开始游戏吧 :-)
还有什么呢?其实没什么了,这个库会自动处理所有规划任务:选择完成目标的动作,并依次执行第一个、第二个……直到完成。你只需要实现自己的动作和目标即可。
在接下来的段落中,我将解释如何创建自己的类(但对于大多数行为来说,你只需实现 GoapAction 和 GoapGoal 即可)。
如何实现自己的 ReGoapAction
请查看此示例中的动作:https://github.com/luxkun/ReGoap/tree/master/ReGoap/Unity/FSMExample/Actions
查看 ReGoapAction 的实现,了解你可以重写的函数:https://github.com/luxkun/ReGoap/blob/master/ReGoap/Unity/ReGoapAction.cs
你需要通过实现 IReGoapAction 接口或继承 ReGoapAction 来实现自己的 ReGoapAction。请明智地选择泛型类型,它们必须在整个智能体的所有类中保持一致。通常情况下,string, object 是最通用的类型;而 int/enum, object 虽然同样通用,但更为轻量。
对于简单的实现,你只需这样做:
public class MyGoapAction : ReGoapAction<string, object>
{
protected override void Awake()
{
base.Awake();
preconditions.Set("myPrecondition", myValue);
effects.Set("myEffects", myValue);
}
public override void Run(IReGoapAction<string, object> previous, IReGoapAction<string, object> next, ReGoapState<string, object> settings, ReGoapState<string, object> goalState, Action<IReGoapAction<string, object>> done, Action<IReGoapAction<string, object>> fail)
{
base.Run(previous, next, goalState, done, fail);
// 在这里编写你自己的游戏逻辑
// 当完成时,无论是在本函数内还是外部,调用 done 或 fail 回调函数,这些回调函数会被 ReGoapAction 自动保存为 doneCallback 和 failCallback。
doneCallback(this); // 这将通知 ReGoapAgent 该行动已成功完成,并继续执行行动计划
// 如果行动失败,则调用 failCallback(this),ReGoapAgent 会自动使整个计划失效,并请求 ReGoapPlannerManager 重新制定计划。
}
}
如前所述,ReGoapAction 默认不会将效果写入内存,但内存系统需要检查效果是否确实已完成。如果你希望在行动结束时设置效果,可以在你的 ReGoapAction 实现中添加以下代码:
public override void Exit(IReGoapAction<string, object> next)
{
base.Exit(next);
var worldState = agent.GetMemory().GetWorldState();
foreach (var pair in effects) {
worldState.Set(pair.Key, pair.Value);
}
}
你还可以让前提条件和效果根据下一个行动的前提条件/效果动态变化。例如,这就是你在智能体中处理 GoTo 行动的方式。
请查看 FSMExample 以了解如何操作:https://github.com/luxkun/ReGoap/blob/master/ReGoap/Unity/FSMExample/Actions/GenericGoToAction.cs
如何实现自己的 ReGoapGoal
这相对简单,大多数目标只需重写 Awake 函数,以添加你自己的目标状态(目标)。
无论如何,请查看 ReGoapGoal 的定义:与所有其他类一样,你需要从头开始实现自己的类,方法是实现 IReGoapGoal 接口或继承 ReGoapGoal:https://github.com/luxkun/ReGoap/blob/master/ReGoap/Unity/ReGoapGoal.cs
同时,请查看此示例中的目标:https://github.com/luxkun/ReGoap/tree/master/ReGoap/Unity/FSMExample/Goals
public class MyGoapGoal : ReGoapGoal<string, object>
{
protected override void Awake()
{
base.Awake();
goal.Set("myRequirement", myValue);
}
}
注意:如果你希望智能体能够自动感知目标是否可用,请务必使用 ReGoapGoalAdvanced。
如何实现自己的 GoapSensor
请在此处查看 GoapSensor 的基础类:https://github.com/luxkun/ReGoap/blob/master/ReGoap/Unity/GoapSensor.cs
更多示例请参阅:https://github.com/luxkun/ReGoap/tree/master/ReGoap/Unity/FSMExample/Sensors
与往常一样,你需要通过继承 ReGoapSensor 或实现 IReGoapSensor 接口来实现自己的传感器类。
public class MySensor : ReGoapSensor<string, object>
{
void FixedUpdate()
{
var worldState = memory.GetWorldState();
worldState.Set("mySensorValue", myValue); // 同样,myValue 可以是任何值……毕竟这是 GoapState :)
}
}
注意:在使用传感器时,请务必使用 ReGoapMemoryAdvanced,因为基础类不会自动检查和更新传感器数据。
调试
当然,你可以使用自己喜欢的编辑器对智能体进行调试。
不过,ReGoap 提供了一个非常实用的 Unity 智能体调试工具(https://github.com/luxkun/ReGoap/blob/master/ReGoap/Unity/Editor/ReGoapNodeEditor.cs 和 https://github.com/luxkun/ReGoap/blob/master/ReGoap/Unity/Editor/ReGoapNodeBaseEditor.cs)。要使用它,只需点击 Unity 菜单中的 Window,然后选择 ReGoap Debugger,一个 Unity 窗口将会打开,这就是智能体调试器。
现在,当你在场景中点击任意智能体(仅在运行时有效)时,窗口会自动更新,显示智能体的“思考”内容(当前世界状态、所选目标和当前计划、可能的目标、可能的动作、可以做什么以及不能做什么——快试试吧!)。
拉取请求
我们欢迎任何拉取请求,但在提交之前,请务必运行 Unity 测试(菜单 Window -> Editor Tests Runner -> Run All),并保持一致的代码风格。
版本历史
0.3.02018/02/110.22017/04/040.1.22017/02/210.12016/12/2202016/12/01常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。