求问:RPG类型的,文字对话系统怎么实现?

想做一款RPG角色扮演&文字互动类的游戏、像行尸走肉系列游戏、隐形守护者这类的,一条主线剧情,然后有A B C…等不同的选择会导致不同的剧情走向。
现在找不到方向怎么起手,论坛里也翻了翻人家提的问题,有说去找 “对话树”怎么实现的,还有一个插件mapstroy的,希望有相关经验的前辈,给个方向~

自顶…别沉呀…

或者说,我不求具体的实现方法,想求助一下社区的各位大佬,能不能给个研究的方向,怎么去设计这个对话系统:blush:

远古的的做法是用顺序状态机,switch-case,但是oop抽象嘛,每一个case就是一个command对象,保存在一个数组里,然后把这个数组保存成二进制节约内存。运行的时候就反序列化,顺序播放这个数组。

现在的做法是协程,其实本质还是模拟了一个顺序状态机。没有协程的语言,你可能会遇到“命令模式”、“状态模式”这些东西。

游戏剧情复杂的情况下,就要有“剧情树”来组织剧情跳转了。前面提到的“剧情状态机”可以是这棵树的一个节点。当然,看抽象角度了,不嫌麻烦,你甚至可以每一个command对象抽象成这棵树的一个节点。

从这两个角度组织代码,你甚至可以做成可视化。

多研究研究状态机,遇事不决状态机,实在不行行为树。

1赞

给个简单的做法,游戏一般不会每个对话都有选项,只是其中很少的对话可以选择剧情走向,因此可以进行简化。
假如有对话 A ~ G,其中到C后产生剧情分支,根据玩家选择,去读后续的对话序列,那么可以配置为:
ABC
DE…
FG…
开始有对话ABC,到C时,让玩家选择剧情走向,玩家选了D,那么继续读后续对话DE…

:pray:蟹蟹

:pray:蟹蟹大佬

有种东东叫行为树

用代码去实现这种树形结构的逻辑?递归?

其实,我是不是做成一个可视化的组件,去编辑对话内容会不会比较好?
“寒风“ (楼上) 也有说,关键剧情,有才会有选择,那相当于我做一个普通的对话框组件+关键剧情对话框组件,挂载载资源管理器上,但是如果这样做,挂载这么多组件在资源管理器上,感觉不太友好…

untiy3d有个插件叫Fungus,你去研究一下。

有可视化的界面

对话框只需要做一个,不同的是对话内容,每天点击更新内容就行了;
对话内容可以用Excel,然后导出成json放到游戏里面使用

关于行为树,除非公司已经有成熟的行为树方案,否则推荐小团队使用,光是行为树的解析,要写好都足以复杂到写个完整的游戏了;更何况还需要做一个可视化的行为树编辑器。参考腾讯开源的行为树方案-behaviac
另外就是,简单需求,用有限状态机就能很好的解决,稍微复杂一点还可以用分层状态机,一般的mmo都够用了。

1赞

好的咧,多谢大佬:pray:

:2:谢谢我去喵喵

大佬你的系统完成了吗?我也是遇到一样的问题,不知道怎么去实现和设计,有思路可以分享一下吗?:pray:

没有完成,但是大概知道怎么去走了。我的方案是用配置控制,不同任务线对应不同的配置表

楼主 问题解决了吗。做了没RPG得

你这回复太泛了呀…做了个Demo,后面没深入了。楼上讲的都挺好的,你可以看看

大佬demo能发下给个参考吗