【教程】在Unity中使用YarnSpinner剧情系统
最终效果:

让我们开始吧
需要用到的东西:
Unity(版本>=2020)
一台八核十六线程的大脑
安装YarnSpinner for Unity插件
从编辑器上方依次打开Edit/Project Settings/Package Manager
点击Scoped Registries栏的+号,填入如下值后点击Apply
Name: OpenUPM
URL https://package.openupm.com
Scope(s): dev.yarnspinner
一定要点击Apply保存

随后打开Window/Package Manager
,在上方选择Packages:My Registries
,就能看到YarnSpinner了。点击Install安装

使用YarnSpinner
在Project选项卡中右键->Create->YarnSpinner->Yarn Script创建YarnSpinner脚本,我这里取名为test。
随后右键->Create->YarnSpinner->Yarn Project创建YarnSpinner项目,我这里取名为Project。
单击刚刚创建的YarnSpinner脚本,将刚刚创建的YarnSpinner项目赋值给脚本的Project变量。
打开YarnSpinner脚本,让我们编写一些对话:
title: test
---
Dream: Hello,PigGod.
PigGod: Dream,I want to 和你 PVP.
-> OK,Coming Coming
PigGod: 哇袄袄袄袄袄袄袄袄袄袄袄
-> 不,我要去踩踩背了
PigGod: Oh Shit.
===
让我们解析上面的代码:
title: test
声明了该节点名字是test
Dream: Hello,PigGod.
这些是普通的对话,Dream:
声明了说话对象
-> OK,Coming Coming
这是一个选项,当选择了一个选项后,进入它后面的对话。
现在我们成功创建了一个YarnSpinner对话,来到Hierarchy选项卡,右键->YarnSpinner->Dialogue System创建对话系统。
这个对话系统是YarnSpinner自带的,在Dialogue System对象的Dialogue Runner脚本中可以看到一个Yarn Project变量,将Project赋值给它。
然后在Dialogue Runner的Behaviour部分中勾选Start Automaticall布尔值,StartNode选择test。

运行查看效果,现在Dialogue System应该可以完整地显示刚才编写的对话。
定制外观
这部分最终的结构图:

我们不使用自带的Dialogue System,Create一个Empty GameObject并命名为Dialogue Runner。为它添加Dialogue Runner脚本
将Project赋值给Yarn Project,然后在Dialogue Runner的Behaviour部分中勾选Start Automaticall布尔值,StartNode选择test。
处理对话文本
新建一个GameObject,命名为LineView,添加Line Presenter脚本和Canvas Group脚本。

将LineView的Canvas Group赋值给Line Presenter的Canvas Group变量。
新建两个TextMeshPro,分别命名为LineText和CharacterText,这两个是对话和人物名称的文本。
将LineText赋值给Line Text,CharacterTex赋值给Name field,如上图。
然后开启Use Typewriter Effect,启用打字机效果。
注意:请打开Shows Name,否则将不会显示人物名
然后,将LineView拖入DialogueRunner的DialoguePresenter里

然后你可以弄一个带白色边的矩形框用来当作显示剧情的背景板,最终效果如下图:

处理选项文本
首先我们来制作选项预制体:
创建一个Text-MeshPro,起名为OptionView,为它添加一个Option Item脚本。
这里给出我的OptionItem参数:

然后创建一个Prefab文件夹,把OptionView拖进去,形成一个预制体。

新建一个GameObject,命名为Option List View,添加Options Presenter,Vertical Layout Group和Canvas Group脚本。
这里给出我的脚本参数:

Option View Prefab直接把刚刚创建的OptionView预制体拖进去就行了。
然后,将Option List View拖入DialogueRunner的DialoguePresenter里
处理用户输入
创建新GameObject,命名为Line Advancer
然后为它添加Line Advancer脚本。
这里给出我的脚本参数:

这些参数的意思是:按Z快进此行或执行下一行对话。
然后,将Line Advancer拖入DialogueRunner的DialoguePresenter里

最后你就能得到下面的效果了。

Bye bye~