ProjectRPG2 是一个基于 Unity 的 2D RPG 项目,核心目标是搭建一套可扩展、数据驱动的回合制战斗框架,并将其与探索、对话、剧情分支系统联动。
当前实现重点在:
- 回合制战斗状态机
- 技能/效果 ScriptableObject 数据驱动
- 敌方 AI 策略评分系统
- 战斗事件总线与 UI 解耦
- 剧情选择对战斗技能和结局的影响
- Unity:
6000.2.8f1 - 渲染管线: URP (
com.unity.render-pipelines.universal) - 输入系统: New Input System (
com.unity.inputsystem) - 主要语言: C#
- 世界中触发战斗:
NPCInteraction->GameManager.StartBattle(...) - 通过 Additive 方式加载战斗场景
Battle - 战斗结束后卸载战斗场景,并将玩家血蓝等运行时结果写回主场景角色数据
战斗流程由 BattleController + StateMachine 维护,主循环状态为:
BattleInit -> TurnStart -> (PlayerInput / EnemyAI) -> ExecuteCommand -> CheckResult -> TurnEnd -> ... -> BattleEnd
对应状态位于:
Assets/Scripts/GamePlay/Battle/States/
TurnOrderSystem按速度排序行动顺序(同速玩家优先)BattleUnit封装单位运行时属性、技能 CD、持续效果(Buff/Debuff)- 支持即时效果与持续效果结算,回合结束自动 Tick
核心数据资产:
- 角色配置:
CharacterDataConfig(Assets/Data/Character/) - 技能配置:
SkillData(Assets/Data/Skill/) - 效果配置:
EffectData(Assets/Data/Skill/Effects/)
技能由多个效果组成;效果由多个 StatModifierData 组成,支持:
- 固定值 / 百分比公式
- 物理 / 魔法 / 真实伤害 / 治疗
- 单体 / 群体 / 自身 / 全体目标
- 即时与持续型效果
已实现两类评分式 AI:
AggressiveAIStrategy:偏进攻、偏集火、低防御倾向BalancedAIStrategy:攻守平衡,按血量与威胁动态决策
可在 CharacterDataConfig 中配置策略类型或自定义权重参数。
BattleEvents 统一广播战斗生命周期、数值变化、技能释放、单位死亡等事件,UIController 订阅事件驱动 HUD、指令面板、技能面板、目标选择和结果面板更新。
- 对话系统
DiaLogmanager支持 CSV 对话脚本、选项分支、打字机效果 - 玩家剧情变量保存在
ChoiceData SkillConditionManager根据ChoiceData过滤可用技能,实现“剧情选择影响战斗能力”ChoiceDataManager在场景切换间缓存玩家选择数据
Assets/
Data/ # 角色、技能、效果等配置资产
Scenes/ # 主菜单、剧情、章节、战斗场景
Scripts/
Core/ # GameManager/Input/Music/VFX
GamePlay/Battle/ # 回合制战斗核心框架
UI/ # 战斗 UI 与面板系统
Story/ # 对话与剧情选择系统
_GAME_/NPCs/Scripts/ # 场景交互、玩家控制、战斗触发
- 使用 Unity Hub 打开项目根目录。
- Unity 版本选择
6000.2.8f1(或兼容的 Unity 6 版本)。 - 打开场景
Assets/Scenes/MainMenu.unity。 - 点击 Play 运行,从主菜单进入教程/序章并触发战斗。
- 移动:
WASD/ 方向键 - 交互:
E - 取消/返回主菜单:
Esc - UI 点击/推进对话:鼠标左键 / Enter(部分界面)
- 新建
EffectData(Battle/Effect Data)定义数值修改器。 - 新建
SkillData(Battle/Skill Data)并组合多个效果。 - 在
CharacterDataConfig里挂载技能并配置 AI。 - 若技能受剧情影响,补充
SkillConditionRule。 - 在场景中为实体绑定对应
CharacterDataConfig即可参与战斗。
- 命中/闪避/暴击为简化实现(基础框架已预留)
- 战斗入口当前主要以 1v1 演示为主,但回合系统本身支持多单位扩展
- 项目内含第三方资源与插件目录(如
PixelWorld*、NavMeshPlus相关文件) Assets/PixelWorldFantasy/ThreePartyLicense/README_NavMeshPlus.md中可查看对应说明