创造你的世界
聊天

使用语音聊天功能

23min

Zepeto.Voice.Chat 预览版本包启用世界中的语音聊天。



安装 ZEPETO.Voice.Chat 并设置模式

1) 安装 Window → 包管理器 → ZEPETO.Voice.Chat。

  • 此功能在实现了多人元素的世界中可用。
  • 测试仅在移动测试中可用,而不在编辑器测试中可用。
  • 由于 iOS 政策,在启用语音聊天的世界中,打开麦克风时设备音量不会降至零。 关闭麦克风时,设备音量将降至零。



Document image


2) 点击正在开发的 Unity 项目屏幕中间菜单的 [▼] 按钮。 在弹出菜单中点击 [打开世界设置] 按钮。

Document image




3) 如果正确安装了 ZEPETO.Voice.Chat 包,您将看到添加的语音聊天模式选项。

Document image




4) 在语音聊天模式中,请设置所需的模式。

  • 基本:使用默认提供的语音聊天功能。
  • 脚本:通过实现语音聊天 API 使用语音聊天功能。
    • 您可以在运行时处理语音聊天的房间访问进出。
    • 为不同团队实现语音聊天(例如,红队语音聊天和蓝队语音聊天)
    • 检测当前说话的用户



基本模式:使用语音聊天功能

一个拥有基本模式语音聊天的世界看起来是这样的。

您还可以使用语音调制功能创建更有趣的语音聊天。

进入具有语音聊天功能的世界时,语音聊天会自动启用。

👍 第一次在ZEPETO中使用语音聊天功能时,会出现关于麦克风访问的弹出窗口。 您必须允许访问才能使用语音聊天功能。

当您启用语音聊天功能时,按钮会自动出现在用户界面中
当您启用语音聊天功能时,按钮会自动出现在用户界面中

您可以通过触摸语音聊天按钮来使用它
您可以通过触摸语音聊天按钮来使用它




  • 在 ZEPETO 应用程序 3.26.000 及以上版本中,语音聊天扬声器图标不显示。
  • 如果您想让语音图标显示,请切换到脚本模式并按照指南编写自己的代码。



脚本模式:使用 VoiceChat API

脚本模式在团队分隔的频道中启用语音聊天。

请参考下面的功能描述和示例来实现该功能。

API

描述

OnInitializedEvent

在初始化事件中,当发生True事件时,语音聊天API可用。 如果此事件为True,则语音聊天可用;如果为False,则语音聊天不可用。

EnterRoom(RoomProperty roomProperty)

进入语音聊天房间的功能 - 成功进入语音聊天房间后,语音聊天按钮将出现

ExitRoom()

离开语音聊天房间的功能

OnRoomConnectedEvent

检查进入语音聊天房间状态的事件。 如果此事件为真,则用户已进入语音聊天房间;如果为假,则用户已离开语音聊天房间。

OnSpeechDetectedEvent<string, boolean>

检测当前在语音聊天中说话的用户的事件。 - string是说话用户的userId - boolean在发言开始时为true,在发言结束时为false

ChangeTeamID(number teamid)

更改语音聊天房间中使用的TeamId的功能 - 只能设置为1或更大的整数值

房间属性类

API

描述

SetAudioMode

在语音聊天中使用的音频模式 - AudioMode.Omnidirectional: 语音聊天模式,不基于距离进行语音衰减 (您可以与或不与ZEPETO角色一起使用) - AudioMode.Directional: 语音聊天模式,基于距离进行语音衰减 (ZEPETO角色必须存在于场景中,因为此模式基于ZEPETO角色的位置)

SetTeamID

在语音聊天中使用的TeamId,以启用具有相同TeamId的用户之间的语音聊天。 - 只能设置为1或更高的整数值

特定团队语音聊天实现示例

这里有一些示例代码来尝试语音聊天API。

1) 添加一个按钮并将文本记录到画布上,如下图所示,以进入语音聊天团队频道并显示状态日志。

  • 按钮
    • 按钮_蓝队 : 蓝队语音聊天入口按钮
    • 按钮_红队 : 红队语音聊天入口按钮
    • 按钮_退出 : 退出语音聊天按钮
  • 文本
    • 文本_日志 : 显示聊天日志的文本
    • 文本_团队 : 显示同一语音聊天团队频道成员列表的文本
    • 文本_当前发言 : 显示当前在语音聊天中发言的用户ID的文本。
Document image




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

3) 编写如下示例脚本。

VoiceChatTest




  • 代码描述
    • 当脚本运行时,它将在 Start() 函数中为每个按钮注册一个事件,并在 VoiceChatController 上注册 OnInitialized、OnRoomConnected 和 OnSpeechDetected 事件。
    • 当点击蓝队按钮或红队按钮时,将执行 EnterVoiceChatRoom() 函数,用户通过输入指定的 RoomProperty 进入语音聊天房间。示例中的房间属性如下。
      • roomProperty.SetAudioMode : AudioMode.Omnidirectional。Omnidirectional 音频模式是一个无论玩家位置如何音量都相同的模式。相比之下,Directional 模式是一个 3D 声音模式,这意味着音量会根据角色的位置而有所不同,因此角色离得越远,音量就会越小。
      • roomProperty.SetTeamID : 蓝队为频道 2,红队为频道 3。SetTeamID 在语音聊天中充当频道。进入频道 2 的团队只能与频道 2 中的玩家进行语音聊天,而进入频道 3 的团队只能与频道 3 中的玩家进行语音聊天。
    • ExitVoiceChatRoom() 将退出当前的语音聊天团队频道。
    • OnSpeechDetected() 将输出当前在团队频道中使用语音聊天的玩家 ID 到日志文本中。



4) 完成脚本后,在检查器中分配步骤 1 中创建的按钮和文本。

Document image




5) 通过二维码或测试链接在移动设备上运行测试,您可以看到在按下“进入团队”按钮时创建了语音聊天激活按钮,并且每当玩家说话时,日志会显示哪个玩家在语音聊天中,如下屏幕所示。

Document image




显示语音聊天气泡图像的示例

在ZEPETO App 3.26.000及更高版本中,语音聊天发言图标不显示。 如果您想处理发言图标的显示,请遵循指南并编写自己的代码。

1) 当玩家在语音聊天中时,要在角色头上显示气泡,您需要创建一个使用气泡图像的预制件。导入您想使用的气泡PNG图像,如下所示,并将其纹理类型更改为Sprite。

Document image




2) 项目 > 创建 > 预制件,并将其重命名为ChatBubble。

Document image




3) 双击ChatBubble预制件以进入预制件编辑模式。选择ChatBubble预制件并选择变换 > 位置 > 将Y值更改为0.35。

Document image




4) 在预制对象内创建一个画布。

  • 双击 ChatBubble 预制件以进入预制编辑模式,然后添加层级 > UI > 画布。
  • 将画布的 RectTransform 组件的值更改为以下内容
    • PosX: 0 , posY: 0
    • 宽度: 100, 高度: 100
    • 缩放X: 0.005, 缩放Y: 0.005, 缩放Z: 0.005
  • 将画布组件的 RenderMove 更改为世界空间。
Document image




5) 在画布内创建一个对话气泡图像。

  • 将层级 > UI > 图像添加为画布的子项,并将其重命名为 ChatBubbleImage。
  • 将 ChatBubbleImage 的 RectTransform 组件的值更改为以下内容
    • 宽度 42, 高度:42
  • 将您在第 1 步中导入的图像精灵注册为图像组件中的源图像。
Document image




👍 提示

  • 您还可以为气泡图像精灵添加动画效果。
  • 您还可以为不同的团队使用单独的气泡图像。



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

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

VoiceChatBubbleController




  • 代码描述
    • 当脚本执行时,它将在Start()函数中注册每个按钮的事件,并在VoiceChatController的OnInitialized、OnRoomConnected和OnSpeechDetected事件中注册事件。
    • 在OnInitialized()之后,当玩家进入世界时,语音聊天按钮将显示在玩家的屏幕上,当他们按下按钮时,将执行EnterVoiceChatRoom()以进入语音聊天房间。
    • 每当玩家激活语音聊天并说话时,OnSpeechDetected()将被执行,如果speechDetected为true,则启用BubbleChat对象,如果为false,则禁用它。
    • 第一次激活OnSpeechDetected()函数时,CreateVoiceBubble()将实例化一个voiceChatPrefab游戏对象,漂浮在玩家的头顶,并将其注册为_map数据。
    • 我们使用LateUpdate()每帧更新语音聊天气泡的旋转,以匹配ZEPETO世界的CameraParent。这确保了气泡图像始终面向相机。它首先检查_voiceBubbleMap是否为空,否则更新气泡图像预制件的旋转。



8) 完成脚本编写后,在检查器中将VoiceChatPrefab条目分配为您在步骤1中创建的气泡预制件。

Document image




9) 通过二维码或测试链接在移动设备上运行,您应该会看到每当玩家使用语音聊天时,气泡图像出现在角色的头顶。



语音调制

从语音聊天版本 0.2.1-preview 开始,您可以在脚本模式下调节语音聊天的声音。





使用 API 指南和示例代码尝试语音调制。

语音类型 (枚举)

描述

类型00

0

原始

类型01

1

小松鼠

类型02

2

叔叔

类型03

3

回声

类型04

4

低音

类型05

5

机器人

类型06

6

方言

类型07

7

扩音器

类型08

8

野兽

类型09

9

机器

类型10

10

强流

类型11

11

孩子

类型12

12

刺猬



这是一个声音调节的示例脚本。

JS

  • 代码描述:
    • 为每个按钮添加一个 onClick 监听器,以设置不同的语音调制类型。
      • 相同索引的元素在按钮数组和语音类型数组中是匹配的。
    • 进入世界时,VoiceChatController 被初始化,并且房间连接会自动建立。
    • 初始语音调制类型设置为Type00,并启用回音以听到自己的声音。
      • 请注意,调用SetVoiceTypeEnableLoopback时,需要房间连接。因此,初始设置在OnRoomConnectedEvent的监听器中处理。



Document image




更改本地玩家的音频播放位置



您可以使用 VoiceChatController.SetLocalPlayerTransform().

使用此功能,您可以通过将您的位置设置为特定空间或物体位置来创建各种场景,在语音聊天中进行交流。



📘 提示 语音聊天的变换与本地玩家的ZEPETO角色变换相关联。

因此,如果本地玩家的ZEPETO角色尚未在世界中创建,您的声音可能无法传输。

在这种情况下,您可以通过在当前场景中设置语音播放位置来使用语音聊天,使用 SetLocalPlayerTransform().



API

描述

public static SetLocalPlayerTransform($transform: UnityEngine.Transform):void

更改本地玩家音频播放位置的功能



❗️ 注意 SetLocalPlayerTransform() 必须在语音聊天初始化后某个时间调用 VoiceChatController.OnInitializedEvent(true)



1) 以下是语音位置更改功能的示例脚本。

VoiceTransformSample


代码描述

  • 当场景开始时,在 Start() 函数中创建一个名为 voiceTransformObject 的游戏对象,并在 voiceTransform 中注册 Transform。
  • 当语音聊天 OnInitialized 监听器被调用时,请应用以下设置:
  • 通过 SetAudioMode(AudioMode.Directional) 将语音聊天设置为 3D 空间音频模式。
  • 通过 VoiceChatController.SetLocalPlayerTransform() 将本地玩家的语音聊天位置设置为 voiceTransform。
  • buttonCloserTransform 在按钮被点击时将 voiceTransform 的位置设置为原点 (0, 0, 0)。
  • buttonFartherTransform 在按钮被点击时将 voiceTransform 的位置设置为 (10, 0, 0)。



2) 将场景中的 Canvas 上的按钮注册到 VoiceTransformSample 组件的 buttonCloserTransform 和 buttonFartherTransform。

Document image




3) 如果您使用二维码或测试链接在手机上运行它,您可以检查以下内容。

  • 当您按下更近按钮时,您的声音会听起来更接近其他人。
  • 当您按下更远按钮时,您的声音会被听到得离其他人很远。







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