语音通话(VOIP)
nanos world 中 VOIP 的工作原理以及如何使用它。
nanos world 使用 Steam 的原生实现提供了一个内置的语音通话 (VOIP) 系统,允许玩家在游戏内通过语音进行交流。该 VOIP 系统具有高度可定制性,可以配置为使用本地/近距离聊天、全局频道,或两者结合。
VOIP 音频类型
VOIP 系统基于两种主要类型:本地/近距离 与 全局。
本地/近距离
本地 VOIP 使用 3D 空间化音频输出玩家的声音。通常,这会附着在占有该玩家的角色上,并模拟出一个真实的音频环境,玩家只有在彼此靠近时才能听到对方说话。
你可以使用 Player:SetVOIPLocalSetting() 来为玩家启用或禁用本地聊天。可以使用 Player:SetVOIPLocalVolume() 调整本地语音的音量,并使用 Player:SetVOIPLocalMaxDistance() 调整声音能被听到的最远距离。
全局
全局 VOIP 允许玩家相互交流,无论他们处于游戏世界中的哪个位置。共有 63 个可用的全局频道(1-63)。可以配置玩家在特定频道上进行收听或发言。
你可以使用 Player:SetVOIPGlobalChannelSetting() 为特定全局频道配置玩家设置,或者使用 Player:SetVOIPGlobalAllChannelsSetting() 一次性配置所有频道。全局聊天的音量同样可以通过 Player:SetVOIPGlobalVolume() 进行调整。
你可以使用 Player:GetVOIPListeningChannels() 和 Player:GetVOIPSpeakingChannels() 检查玩家正在哪些频道中收听或说话。
-- 创建一个“队伍无线电”:每个队伍的玩家仅在其队伍频道中说话和收听
function SetPlayerTeamRadio(player, team)
-- 停止在所有全局频道中收听和说话
player:SetVOIPGlobalAllChannelsSetting(VOIPSetting.None)
-- 在队伍频道中说话和收听(队伍 1 使用频道 1,依此类推)
player:SetVOIPGlobalChannelSetting(team, VOIPSetting.Both)
end
高通/低通滤波器
在全局频道中,可以通过 Player:SetVOIPGlobalHighPassFilter() 和 Player:SetVOIPGlobalLowPassFilter() 方法对全局音频设置滤波器。
我们可以通过设置高通滤波器(例如 player:SetVOIPGlobalHighPassFilter(8000))来模拟出收音机效果。
高通/低通滤波器仅在全局频道中可用。
VOIP 设置
本地和全局频道的 VOIP 设置均是使用 VOIPSetting 枚举进行配置的。可以在本地频道以及每个全局频道上定义玩家是仅收听、仅说话还是两者兼有!
了解谁在说话
当玩家开始或停止说话时会触发 VOIP 事件,这对于在 UI 中显示“正在讲话”指示器非常有用:
Player.Subscribe("VOIP", function(player, is_talking)
Console.Log("%s is %s", player:GetName(), is_talking and "talking" or "silent")
end)
静音
玩家可以通过两种相互独立的方式被静音。
被脚本静音: 可以使用 Player:SetVOIPMuted() 方法静音某个玩家。如果在服务器端调用,该玩家将对所有人静音(并且其游戏会停止发送语音),但也可以在客户端调用以进行本地静音。
被玩家自己静音: 玩家可以通过暂停菜单中的 静音 按钮静音自己的麦克风,或在自由麦模式下按 VOIP 按键。此静音属于玩家本人:脚本无法更改,但可以通过 Client.IsVOIPSelfMuted() 读取,并监听 VOIPSelfMuteChange 事件,例如在 UI 中显示静音图标:
Client.Subscribe("VOIPSelfMuteChange", function(is_muted)
MyHUD:CallEvent("SetMicMuted", is_muted)
end)
玩家自己的静音状态在游戏打开期间会保留,即使切换服务器也是如此,但不会被保存。
按键说话与自由麦
每个玩家在音频设置中选择其麦克风的工作方式:
- 按键说话(默认):仅在玩家按住 VOIP 按键时发送语音。
- 自由麦:除非玩家自己静音,否则始终发送语音。在此模式下,按 VOIP 按键可切换玩家自己的静音状态。
这是玩家偏好设置,脚本无法更改,但可以通过 Client.GetSettings() 使用 VoicePushToTalk 键读取,例如在 UI 中显示正确的提示。
配置麦克风
由于我们使用了 Steam 的实现方式,你可以在 Steam 的设置中配置你的麦克风,该设置可以通过 Steam 客户端或 Shift+Tab 叠加界面快捷键进行访问。这允许你调节麦克风音量、测试麦克风并设置其他音频偏好设置。
