创造你的世界
玩家及角色:进阶

创建一个NPC

33min

学习如何从ZEPETO角色创建NPC。

应用为每个功能提供的示例脚本,将您选择的NPC添加到您的世界中。



使用ZEPETO ID创建NPC。

Document image




  • NPC的外观和穿着的物品将与输入的ZEPETO ID相同。
  • 建议您在创建NPC之前,先设置具有特定外观的ZEPETO角色。



设置NPC将要创建的位置对象



  • 在您的场景中默认实现ZEPETO角色创建代码。

📘 请参考以下指南。[创建ZEPETO角色]



  • 创建层级 > 创建空对象并将其重命名为NPC。
    • 一个用于存储NPC将要创建的位置的对象。
    • 设置位置、旋转。
Document image




编写NPC创建脚本



1) 创建项目 > 创建 > ZEPETO > TypeScript 并将其重命名为NPCCreator。

2) 编写如下示例脚本。

TypeScript




脚本的流程如下:

  • Start()
    • 使用ZepetoCharacterCreator.CreateByZepetoId()函数在NPC对象位置创建NPC,并将其保存在_npc中。



3) 完成脚本编写后,将脚本添加到NPC对象中。

4) 在检查器中分配 Zepeto ID。

  • Zepeto ID : NPC 的 ZEPETO ID。
示例脚本设置屏幕
示例脚本设置屏幕




5) 按下播放按钮以执行,NPC 将被创建。

6) 以相同的方式添加 NPC 位置对象,并添加 NPC 脚本以轻松创建多个 NPC。

Document image




标记 NPC



您可以使用名称标签标记您的 NPC,以将其与玩家区分开。

Document image




创建名称标签画布预制件



1) 创建层级 > UI > 画布,并将其重命名为 PrefNameTagCanvas。

  • 将渲染模式设置为世界空间。
画布设置示例
画布设置示例




2) 创建层级 > UI > 文本,作为 PrefNameTagCanvas 的子项,并将其重命名为 NameTagText。

  • 表示名称的文本。
  • 添加一个内容大小适配器组件,使文本大小合适。
文本设置示例
文本设置示例




3) 完成后,将其拖到项目窗口以使其成为预制件,然后删除仍在高亮显示的 PrefNameTagCanvas。

预制件配置示例
预制件配置示例




创建 NPC 名称标签脚本



1) 创建一个项目 > 创建 > ZEPETO > TypeScript,并将其重命名为 NPCCreatorWithNameTag。

2) 编写如下所示的示例脚本。

TypeScript




脚本的流程如下:

  • 开始()
    • 调用 SetNameTag() 自定义函数。
  • SetNameTag()
    • 动态生成 NPC 的名称标签,并调整生成的名称标签在 NPC 头顶的位置
    • 设置名称标签内的文本。
  • 更新()
    • 调用 UpdateCanvasRotation() 自定义函数以旋转画布以匹配相机。



3) 完成脚本编写后,将其添加到 NPC 对象。

4) 在检查器中,分配 Zepeto Id、名称标签、名称标签预制件和名称标签 Y 偏移量。

  • 名称标签:将在 NPC 的名称标签上显示的名称。
  • 名称标签预制件:名称标签画布预制件。
  • 名称标签 Y 偏移量:存储名称标签画布对象的 y 轴偏移值的变量。当您将名称标签放置在角色头顶时,可以调整角色与名称标签之间的距离。
示例脚本设置屏幕
示例脚本设置屏幕




5) 按下播放按钮以执行,将创建带有名称标签的NPC。

Document image




控制NPC行为



您可以控制NPC的动作。



跳跃



Document image




使用ZEPETO角色API使NPC跳跃。

您可以使用 ZEPETO 角色 API 来实现更广泛的行为。

📘 请参考以下指南。 [ZEPETO角色]



创建 NPC 跳跃脚本

1) 转到项目 > 创建 > ZEPETO > 创建 TypeScript 并将其重命名为 NPCJump。

2) 编写如下示例脚本。

TypeScript


脚本的流程如下:

  • 开始()
    • 调用 JumpCoroutine() 协程。
  • JumpCoroutine()
    • 调用 Jump() 方法使 NPC 角色每 5 秒跳一次。



3) 完成脚本编写后,将脚本添加到 NPC 对象。

4) 按下播放按钮,NPC 将会跳跃。



手势



Document image




使用动画控制器为NPC实现手势。

您可以使用动画控制器实现更广泛的行为。



准备您的动画剪辑



  • 使用以下指南准备NPC执行的手势动画剪辑。

📘 请参考以下指南。



创建动画师



1) 项目 > 创建 > 创建动画控制器并将其重命名为NPCAnimatorController。

Document image




2) 在动画师标签上,创建状态 > 空。

Document image




3) 在检查器中,适当地重命名并将动画剪辑分配给运动。

Document image




创建NPC手势脚本



1) 创建一个项目 > 创建 > ZEPETO > TypeScript 并将其重命名为 NPCGesture。

2) 编写如下示例脚本。

TypeScript




脚本的流程如下:

  • Start()
    • 获取 NPC 对象的 Animator 组件,并将其设置为由 npcAnimator 变量指定的 Animator Controller。



3) 在您完成编写脚本后,将其添加到将要创建 NPC 的位置对象中。

4) 在检查器中,分配 Zepeto Id,Npc 动画师。

  • Npc 动画师:NPC 的动画控制器。
Document image




5) 按下播放按钮以运行它,您将看到 NPC 做出手势。

6) 你可以应用这个来创建除了手势和跳跃之外还可以执行更多动作的NPC。



NPC上方的对话气泡



你可以在NPC的头上创建一个画布,显示图像或文本,并使其呈气泡状。

Document image




创建对话气泡画布预制件

1) 创建一个层级 > UI > 画布,并将其重命名为 PrefSpeechBubbleCanvas。

  • 将渲染模式设置为世界空间。
Document image




2) 创建一个层级 > UI > 图像,作为 PrefSpeechBubbleCanvas 的子项,并将其重命名为 SpeechBubbleImage。

  • 这是将作为对话气泡背景的图像。
图像设置示例
图像设置示例




3) 创建层次结构 > UI > 将文本作为对话气泡图像的子项,并将其重命名为对话气泡文本。

  • 这是对话气泡内的文本。
  • 添加一个内容大小适配器组件,使文本大小合适。
文本设置示例
文本设置示例




4) 完成后,将其拖到项目窗口以使其成为预制件,然后删除仍在高亮显示的PrefSpeechBubbleCanvas。

预制件配置示例
预制件配置示例




创建NPC对话气泡脚本



1) 创建一个项目 > 创建 > ZEPETO > TypeScript,并将其重命名为NPC对话气泡。

2) 编写如下示例脚本。

TypeScript




脚本的流程如下:

  • 开始()
    • 调用 SetBubble() 自定义函数。
  • SetBubble()
    • 创建一个对话气泡画布 (speechBubblePrefab),并将创建的对话气泡放置在 NPC 的头上
    • 调用 SetBubbleText() 自定义函数以设置对话气泡内的文本。
  • SetBubbleText()
    • 激活 NPC 的对话气泡画布 (_speechBubbleObject)。
    • 在对话气泡内显示作为参数给定的字符串 (bubbleText)。
  • 更新()
    • 调用 UpdateCanvasRotation() 自定义函数以旋转画布以匹配相机。



3) 在您完成编写脚本后,将其添加到 NPC 将要创建的位置对象中。

4) 在检查器中,分配 Zepeto Id、对话框文本、对话框预制件和对话框 Y 偏移量。

  • 对话框文本:此变量存储 NPC 角色在对话框中将要说的对话。在我们的示例中,我们存储以下对话:"你好,世界"。
  • 对话框预制件:此变量存储对话框画布游戏对象的预制件。
  • 对话框 Y 偏移量:此变量存储对话框画布游戏对象的 y 轴偏移值。这允许您在将对话框放置在角色头上时调整角色与对话框之间的距离。
示例脚本设置屏幕
示例脚本设置屏幕


5) 按下播放按钮以执行,您将看到一个对话框漂浮在 NPC 的头上。



与 NPC 互动



通过与NPC互动,您可以实现许多有趣的内容。

在本指南中,我们将使用一个示例来实现一个在接近NPC时会变化的对话框。

Document image




设置碰撞体



1) 为您的对象添加一个碰撞体组件,以便与NPC互动并检查isTrigger。

Document image




2) 调整碰撞体的大小,以便玩家可以与NPC互动。

Document image




创建 NPC 交互脚本



1) 创建项目 > 创建 > ZEPETO > TypeScript,并将其重命名为 NPCInteraction。

2) 编写如下示例脚本。

TypeScript




脚本的流程如下:

  • OnTriggerEnter(), OnTriggerExit()
    • 当触发器通过进入碰撞体区域被检测到时,调用 SetBubbleText() 自定义函数将对话框内的文本设置为 changedSpeechBubbleText。
    • 当它离开碰撞体区域时,调用 SetBubbleText() 自定义函数将对话框内的文本设置为 speechBubbleText。



3) 在您完成编写脚本后,将其添加到 NPC 将要创建的位置对象中。

4) 在检查器中,分配 Zepeto Id、对话框文本、对话框预制件、对话框 Y 偏移量和更改后的对话框。

  • 对话框文本:此变量存储 NPC 角色将在对话框中说的对话。在我们的示例中,我们存储以下对话:"你好,世界"。
  • 对话框预制件:此变量存储对话框画布游戏对象的预制件。
  • 对话框 Y 偏移量:此变量存储对话框画布游戏对象的 y 轴偏移值。这使您可以在角色头上放置对话框时调整角色与对话框之间的距离。
  • 更改后的对话框:存储当玩家进入 NPC 的碰撞体时将在 NPC 的对话框中显示的对话。
示例脚本设置屏幕
示例脚本设置屏幕




5) 按下播放以执行,当玩家接近NPC时,气泡中的文本将会改变。



应用NPC交互



要创建对话格式,请使用面板创建UI。

以下是一个由面板和按钮组成的简单对话示例。

Document image




这是一个示例脚本,当与NPC交互时打开对话框,并在每个按钮被按下时处理它们。

应用此内容以实现有趣的内容。

TypeScript




更新日期 11 Oct 2024
Doc contributor
Doc contributor
此页面是否对您有帮助?