创造你的世界

手势

31min

ZepetoWorldContent API 允许您为所需的手势/姿势类别设置缩略图,并在点击缩略图时启用特定的手势/姿势。

Document image




要使用 ZepetoWorldContent API,您必须按如下方式编写导入语句。

TypeScript




包含手势/姿势信息的内容类的成员变量和函数信息如下:

API

描述

public get Id(): string

内容唯一标识符

public get Title(): string

手势、姿势标题文本 - 语言将根据设备语言自动翻译

public get Thumbnail(): UnityEngine.Texture2D

2D缩略图

public get AnimationClip(): UnityEngine.AnimationClip

手势动画剪辑

public get IsDownloadedThumbnail(): boolean

确定您是否之前下载过此缩略图的功能

public get IsDownloadedAnimation(): boolean

确定您是否之前下载过此动画剪辑的功能

public DownloadAnimation($complete: System.Action):void

一个动画剪辑下载功能,接收一个完成回调 - 如果 IsDownloadedAnimation() 为 false,则实现 DownloadAnimation() 被调用。

public DownloadThumbnail($complete: System.Action):void

下载缩略图的功能 - 如果 IsDownloadedThumbnail() 为 false,则实现 DownloadThumbnail() 被调用。

OfficialContentType : enum

内容类型(世界 1.9.0 及更高版本) - 手势 = 2 - 姿势 = 4 - 自拍 = 8 - 手势问候 = 16 - 手势姿势 = 32 - 手势肯定 = 64 - 手势舞蹈 = 128 - 手势否定 = 256 - 手势等 = 512 - 全部 = 14

  • 您可以使用现有的功能,public DownloadThumbnail($character: ZEPETO_Character_Controller.ZepetoCharacter, $complete: System.Action):void,没有任何功能方面的问题。然而,由于它不再接受Zepeto角色作为参数,请使用新修改的功能public DownloadThumbnail($complete: System.Action):void替代。



步骤 1 : 设置用户界面



步骤 1-1 : 创建手势按钮

1) 添加层级 > 用户界面 > 画布,并将排序顺序设置为2,以避免被其他用户界面遮挡。

Document image




2) 添加层级 > UI > 按钮。

示例手势按钮
示例手势按钮




步骤 1-2 : 组织手势面板

1) 添加层级 > 创建空对象并重命名为 PanelParent。

Document image




2) 添加层级 > UI > 面板作为 PanelParent 的子项。

示例手势面板
示例手势面板




3) 关闭按钮:添加 UI > 按钮后,添加 onClick 事件以禁用手势面板。

关闭按钮配置示例
关闭按钮配置示例




4) 打开按钮:请为上面创建的打开按钮添加一个激活手势面板的 onClick 事件。

打开按钮配置示例
打开按钮配置示例




5) 添加一张图片作为标题区域。

标题图片示例
标题图片示例




6) 配置一个滚动视图以显示手势缩略图。

  • 添加层级 > UI > 滚动视图。
  • 勾选水平并禁用滚动条图像,因为您只会使用垂直滚动,水平滚动将不需要。
  • 在滚动视图的内容中添加网格布局,以将缩略图对齐为网格模式。
  • 添加内容大小适配器,使对象的大小适合内容的大小。
  • 当您实现脚本时,必须将滚动视图中的内容设置为手势缩略图的父级(以便整个区域被识别并滚动)
滚动视图配置示例
滚动视图配置示例




7) 按手势类型配置选项卡。

  • 添加层级 > 创建一个空对象作为面板的子项,并将其重命名为 GestureTitle。
    • 这是切换按钮的父对象。
    • 添加水平布局以水平对齐选项卡。
    • 添加切换组组件。

👍 要配置更多选项卡,添加层级 > UI > 滚动视图,并在滚动视图选项中勾选水平。

GestureTitle 配置示例
GestureTitle 配置示例




8) 将用作切换按钮的文本添加为GestureTitle的子项,并将其替换为全部。

  • 将文本颜色设置为灰色。
  • 添加在选中时显示的高亮文本作为文本的子项。
    • 设置字体内容、大小和粗细相同,并将颜色设置为黑色。
  • 添加切换组件。
    • 指定组中的父对象。
    • 添加您作为Graphic的子项添加的高亮文本。
    • 仅检查将首先显示的所有切换组件的isOn。
  • 以相同的方式创建Gesture和Pose切换按钮。
切换按钮配置示例
切换按钮配置示例




步骤 1-3 : 制作缩略图预制件

使用创建缩略图按钮作为预制件的方法,然后在脚本中生成它的实例。

1) 将 UI > 按钮添加为 Scroll View 中 Content 的子项,并将其重命名为 preThumb。

2) 添加 Raw Image 后,请将名称更改为 Thumb。

  • 此图像将作为缩略图。请适当调整大小。

3) 添加文本。

  • 设置位置以居中图像底部。
  • 调整文字的大小和粗细,并添加内容大小适配器。
    • 水平适配 : 首选大小
    • 垂直适配 : 首选大小

4) 如果设置完成,请将其制作成预制件并放入 Resources 文件夹中。

缩略图预制配置示例
缩略图预制配置示例

执行后在手势面板上设置缩略图按钮的示例
执行后在手势面板上设置缩略图按钮的示例




步骤 1-4 : 用户界面设置指南视频



👍 视频中显示的用户界面大小和位置值是推荐的,但您可以将其修改为您想要的值!

一旦用户界面设置完成,继续进行脚本编写。



步骤 2 : 编写脚本

此脚本基于单次播放。



步骤 2-1 : 缩略图

  • 项目 > 创建 > ZEPETO > TypeScript 并重命名为缩略图。
  • 编写如下示例脚本。
    • 这是一个将手势内容信息(标题、图像)组织到 UI 中的脚本。
缩略图

  • 创建脚本后,打开 preThumb 预制件并添加脚本。
Document image




步骤 2-2 : GestureLoader

  • 创建一个层次结构 > 创建空对象并将其重命名为 GestureLoader。
  • 创建一个项目 > 创建 > ZEPETO > TypeScript 并将其重命名为 GestureLoader。
  • 编写如下示例脚本。
GestureLoader

  • 计数是每个标签上要下载的最大手势数量。如果您将其设置为大于100的数字,缩略图下载过程中可能会出现错误,因此请仅根据需要进行设置。



脚本流程如下:

1) 调用 ContentsRequest() 自定义函数以在加载 ZEPETO 角色后生成缩略图。

  • ContentsRequest() 函数通过分别分离手势和姿势来接收内容信息。
    • 如果存在现有的缩略图,则跳过;否则,检索缩略图。
    • 检索到的缩略图数据存储在各自的列表中。
手势脚本设置屏幕示例
手势脚本设置屏幕示例




步骤 2-3 : UIController

  • 创建一个层次结构 > 创建空对象并将其重命名为 UIContoller。
  • 创建项目 > 创建 > ZEPETO > TypeScript 并将其重命名为 UIContoller。
  • 编写如下示例脚本。
UIController


脚本流程如下:

  1. 触摸触控板或关闭按钮以使用CancelGesture()函数取消播放。
  2. 点击标签(切换按钮)以调用SetCategoryUI()自定义函数。
  3. SetCategoryUI()函数使用每个缩略图中的手势内容信息为每个相应类别设置。
  • 如果是适用类型则启用,不是则禁用。



完成脚本后,将关闭按钮和类型切换组分配给检查器。

  • 类型切换组的入口是手势面板中切换组的子切换。
示例脚本设置屏幕
示例脚本设置屏幕




步骤 3 : 运行

❗️ 注意 在播放之前,请禁用 PanelParent,以便在播放时仅显示打开按钮。

Document image




步骤 4 : 同步多玩家手势

  • 在多玩家的情况下,必须添加一个同步代码,该代码接收特定玩家所采取的手势信息值,并将其应用于所有访问房间的玩家。
  • 关键是发送和接收关于哪个玩家做了哪个手势的房间消息,在服务器和客户端之间进行。



步骤 4-1 : 客户端代码

缩略图 - 多人游戏

  • 编写与单人游戏客户端代码中实现的相同脚本。
缩略图 - 多人游戏




手势加载器 - 多人游戏

  • 默认情况下,单人游戏客户端代码中实现的脚本是相同的。
  • 此外,客户端声明接口以包含 PlayerGestureInfo。
  • 当将您的信息发送到服务器时:请参见 SendMyGesture() 自定义函数
    • 当您的玩家按下缩略图以进行手势时,使用 room.Send() 将手势 ID 发送到服务器。
    • 当您取消手势时,处理它以发送您已取消的信息。
  • 从服务器接收来自另一个客户端的手势信息时:"OnChangeGesture" 房间消息被发送到 this.room.AddMessageHandler() 内的 Start()
    • 通过在 "OnChangeGesture" 消息中包含会话 ID 和手势 ID 来实现同步,并使适当的玩家执行手势。
TypeScript




  • 完成脚本后,检查员将为Multiplay分配一个额外的对象,使用Zepeto World Multiplay组件。



示例脚本设置屏幕
示例脚本设置屏幕

带有Zepeto世界多人游戏组件的对象示例
带有Zepeto世界多人游戏组件的对象示例




UIController - 多人游戏

  • 默认情况下,单人游戏客户端代码中实现的脚本是相同的。
  • 与单人游戏客户端代码的区别在于 StopGesture() 自定义函数。
    • 在 GestureLoaderMultiplay 中调用 SendMyGesture() 自定义函数。
    • 处理发送手势已被取消的信息。
TypeScript




步骤 4-2 : 服务器代码

  • 服务器代码然后声明接口以包含 PlayerGestureInfo,方式相同。
    • 服务器代码默认基于 Multiplay Sample 中的服务器代码。
  • 它创建了一个 onMessage() 回调,当手势在 onCreate() 中变化时,将手势信息发送给其他客户端。
TypeScript