Unity2D对话系统 - 使用Ink标签设置名称、肖像和布局 | Unity + Ink教程

Try Proseoai — it's free
AI SEO Assistant
SEO Link Building
SEO Writing

Unity2D对话系统 - 使用Ink标签设置名称、肖像和布局 | Unity + Ink教程

文章目录将如下所示:

目录

  • 介绍 🌟
  • NPC名称和头像的显示和管理 🎭
  • Unity中对话系统的创建和布局管理 🎮
  • 使用Ink进行对话编写和标记处理 📝
  • 添加标签以设置对话框面板的显示名称 🏷️
  • 使用标签更改头像和布局 🔄
  • 处理对话中的布局切换 🎭
  • 对话管理器中的角色模式设定 ❗
  • 重置对话框开启时的默认值 ❄️
  • 总结和建议 💡

介绍 🌟

在这个视频中,我将向大家展示一种在Unity中构建的简单但高效的方法,用于显示和管理NPC名称、头像和不同对话布局的对话系统。我们将建立一个系统,可以轻松地在对话的每一行中更改头像和名称,并且可以轻松地更改对话面板的布局。这个教程是我之前制作的有关对话系统和选择的教程的延续,但你不需要看过那个视频才能理解本教程。然而,我们将使用之前构建的对话系统作为本教程的起点。所以如果你刚开始尝试构建对话系统并需要一个起点,我强烈推荐你先查看那个视频,然后再回来看这个。另外,正如我之前提到的,我们将使用Ink来编写对话,Ink在我们管理NPC名称、头像和布局方面发挥了重要作用。我不会详细介绍Ink语法,但我们会保持简单。如果你有兴趣深入了解如何使用Ink编写对话,我将在视频描述中放置一个链接。

NPC名称和头像的显示和管理 🎭

我们可以使用标签(tags)来为任何对话行添加元数据。每个标签只是作为字符串在Unity中读取,所以我们可以根据自己的需求对其进行结构化。一个很好的方式是设置标签和键值对,其中键表示我们在C#代码中要执行的某个操作,值表示该操作使用的某些数据。这里的#符号表示这是一个标签,speaker是键,Bob是值,用冒号分隔。我们可以将此标签作为字符串读入Unity,然后将其解析为键值对,并使用值执行该键的操作。这正是我们将要在设置对话框面板的显示名称时做的事情。类似地,我们还将使用标签来设置对话框面板的头像和布局。不过,在这些情况下,值将与我们在Unity中设置的动画状态的名称匹配。当我们在Ink中读取该标签时,我们可以播放该动画,从而改变头像或布局。

Unity中对话系统的创建和布局管理 🎮

在Unity中,我们最开始创建了一个Unity项目。该项目中已经安装了Unity Ink插件和TextMeshPro,我们稍后会使用它们。项目中有一个场景,其中包含两个NPC。当你走近其中一个时,可以按下一个按钮显示一些对话。对话本身是用附加到NPC上的对话触发器脚本中的Ink文件编写的。当与NPC交谈时,该NPC将Ink文件传递给名为对话管理器的单例类。对话管理器负责读取Ink文件,根据每一行的对话设定对话文本和选项。对于这个教程来说,对话管理器是我们将处理Ink标签的地方,在视频进程中,我会解释得更详细。此外,我提前准备了一些肖像艺术作品,你可以在项目的艺术目录中找到。

使用Ink进行对话编写和标记处理 📝

现在,我们将创建一个使用标签的新的Ink对话文件。为了本教程的目的,我们将将有两个角色:Dr.Green(一个绿色的矩形)和Ms.Yellow(一个黄色的矩形)。在项目的对话文件夹内,我们要新建一个Ink文件,名为DrGreen。然后双击它以在Inky中打开。我将编写一些简单的对话,其中Dr.Green将发表大部分台词。玩家将被给予一个选择,选择他们是快乐还是伤心,这将使Dr.Green感到快乐或伤心。然后,Ms.Yellow说了一句台词,声称Dr.Green实际上并不是一位医生,并且最后我们会使对话连续循环,只要玩家对最后一个问题回答是肯定的。

添加标签以设置对话框面板的显示名称 🏷️

接下来,让我们处理第一行对话中的标签,为此创建一个新的文件夹,在项目的动画文件夹中,命名为"组件"。创建一个新的动画控制器,命名为"重要?然后我们可以对它进行双击,以在Unity的动画编辑器中打开它。接下来,让我们将此动画拖动到场景层次结构中的对话框面板上,将其添加为组件。接下来,我们打开动画窗口,然后在"组件"文件夹中创建一个新的Animation,称为默认的。然后将其动画添加到动画编辑器中,以将其添加到动画中。确保你当前选择的是场景层次结构中的对话框面板,并且动画编辑器显示"默认"作为当前动画。然后,我们可以从艺术目录中将默认肖像拖放到动画中。

使用标签更改头像和布局 🔄

让我们思考一下在最开始时设置头像的情况。我将将头像设置为"Dr.Green neutral"。请记住,这里的值将是后面我们将在本教程中创建的动画的名称。当我们回答"happy"时,将头像设置为"Dr.Green happy",回答"sad"时,将头像设置为"Dr.Green sad"。在Ms.Yellow说话时,将头像切换到"Ms.Yellow neutral"。当然,在下一句台词中,我们将切换回"Dr.Green neutral"。至于布局,我们将为Dr.Green的所有对话使用一个布局,其中头像位于左侧。对于Ms.Yellow,头像将位于右侧。因此,在角色切换时,我们将使用@layout标签,其中leftright对应于我们稍后将创建的动画名称。

处理对话中的布局切换 🎭

我们在Unity中创建了一个文件夹,名为"动画",用于存放不同布局动画。在该文件夹中,我们创建了一个名为"layout animator"的动画控制器。然后,我们创建了名为"Right"和"Left"的两个动画,并将它们拖放到动画控制器中。然后,我们点击场景层次结构中的对话框面板,将右侧动画选择为当前动画。然后,我们可以点击记录按钮,以记录布局更改时的以上位置值。值得注意的是,我们要确保为每个需要移动的游戏对象设置这些值,以便它们变为红色,表示已经录制。在对话中切换布局时,它们还会显示在动画窗口中作为关健帧。如果在录制右侧布局时出现任何问题,你可能需要检查一下参数是否正确。录制完成后,我们再次点击记录按钮,以停止录制。接下来,我们切换到左侧布局,然后重复相同的操作。最后,我们在对话管理器中对各个标签进行处理,就像我们在头像标签中所做的那样。在Unity中,别忘了将对话图像拖放到对话管理器的对话图像插槽中,监测右上的动画框内是否显示出当前所选的动画。现在,如果我们进入播放模式并与Dr. Green交谈,我们会看到头像根据Ink标签的设定而改变。这部分都按照预期工作。

对话管理器中的角色模式设定 ❗

你可能已经注意到,在对话结束后,如果我们与不使用标签的其他NPC交谈,一些信息会从先前的对话中保留下来。我们希望在对话刚开始时,将头像、说话者和布局的信息重置为默认值,这样标签信息就不会在NPC之间传递。回到对话管理器脚本,在"enterDialogMode"方法中,会在与任何NPC交谈开始时调用它,我们添加几行代码来将动画和显示名称文本重置为默认值。然后我们就有一个良好的指示,在缺少标签时和在NPC之间不必要地传递标签时有一个良好的指示。这样就结束了。

重置对话框开启时的默认值 ❄️

void EnterDialogMode()
{
    // Reset animators to default states
    portraitAnimator.Play("Default");
    layoutAnimator.Play("Default");

    // Reset display name text
    displayNameText.text = "???"";
}

总结和建议 💡

在本教程中,我们学习了如何使用标签在Unity中显示和管理NPC名称、头像和不同对话布局。我们建立了一个系统,可以根据Ink文件中的标签轻松更改对话框的显示名称、头像和布局。我们还学习了如何使用Ink进行对话编写和标记处理。通过添加标签,我们能够根据需要为每一行对话设定相关操作的动画和布局。此外,我们还处理了对话中的布局切换,确保每个角色的对话都有正确的布局。最后,我们重置了对话框的默认值,以防止标签信息在不同NPC之间传递。希望本教程对你有所帮助,谢谢观看!

Resources:

Are you spending too much time on seo writing?

SEO Course
1M+
SEO Link Building
5M+
SEO Writing
800K+
WHY YOU SHOULD CHOOSE Proseoai

Proseoai has the world's largest selection of seo courses for you to learn. Each seo course has tons of seo writing for you to choose from, so you can choose Proseoai for your seo work!

Browse More Content