Czat głosowy to funkcja czatu oparta na bliskości, która symuluje realistyczną komunikację, dostosowując głośność mówców w miarę zbliżania się lub oddalania od siebie w przestrzeni 3D. Dzięki możliwości rozmowy przez mikrofony, gracze mogą wspólnie socjalizować się i strategizować w czasie rzeczywistym na całym świecie, aby zrealizować cele Twojej gry.
Korzystając z pliku .rbxl Gingerbread Island - Czat Głosowy jako odniesienia, ten samouczek pokazuje, jak włączyć różne formy czatu głosowego do swojej rozgrywki, w tym wskazówki dotyczące:
- Sortowania graczy w zespoły, które mogą używać czatu głosowego tylko z członkami swojego zespołu.
- Pozwalania graczom na tymczasowe aktywowanie mikrofonu, gdy naciskają określony przycisk na swoim urządzeniu.
- Konfigurowania okresów, w których czat głosowy jest włączony lub wyłączony.
Przeglądając poniższe sekcje wraz z przykładem, możesz dostosować każdy fragment kodu, aby lepiej spełniał potrzeby Twojego czatu głosowego.
Skonfiguruj ustawienia
Aby czat zespołowy, czat aktywowany przyciskiem lub czat oparty na czasie działały poprawnie, musisz skonfigurować swoje ustawienia czatu głosowego, aby włączyć czat głosowy i utworzyć odpowiednie obiekty audio niezbędne do odbierania i emitowania dźwięku w środowisku 3D.
Gdy gracze dołączają do Twojej gry, Twoje ustawienia czatu głosowego teraz:
- Pozwalają graczom uprawnionym do czatu używać swoich mikrofonów.
- Tworzą i przypisują obiekt AudioDeviceInput pod każdym uprawnionym do czatu Player.
- Tworzą i przypisują obiekt AudioEmitter pod każdym uprawnionym do czatu Player.Character.
- Tworzą i przypisują obiekt AudioListener pod Workspace.CurrentCamera.
Poniższe sekcje szczegółowo opisują trzy unikalne konfiguracje czatu głosowego przy użyciu tych ustawień. Podczas gdy śledzisz przykład pliku Gingerbread Island - Czat Głosowy, możesz włączyć odpowiedni wyłączony skrypt w oknie Eksplorator, aby przetestować ich działanie. Aby upewnić się, że każdy z nich działa poprawnie, upewnij się, że ponownie wyłączysz skrypt przed przejściem do następnej konfiguracji.

Dodaj czat zespołowy
Czat zespołowy to konfiguracja czatu głosowego, w której tylko gracze w tym samym zespole mogą mówić lub słyszeć się nawzajem w grze. Integracja czatu zespołowego w Twojej rozgrywce jest przydatna, gdy chcesz, aby gracze współpracowali i strategizowali razem, aby rozwiązać problemy w grze, takie jak koordynowanie informacji o pozycjach drużyny wroga, zasobach i zadaniach.
Aby odtworzyć czat głosowy zespołu w przykładowym pliku Gingerbread Island - Czat Głosowy:
W oknie Eksplorator wstaw Skrypt do ServerScriptService.
Zmień nazwę skryptu na TeamChat, a następnie wklej poniższy kod do skryptu:
local Teams = game:GetService("Teams")local Players = game:GetService("Players")local redTeam = Instance.new("Team", Teams)redTeam.TeamColor = BrickColor.new("Bright red")redTeam.AutoAssignable = trueredTeam.Name = "Czerwony Zespół"local blueTeam = Instance.new("Team", Teams)blueTeam.TeamColor = BrickColor.new("Bright blue")blueTeam.AutoAssignable = trueblueTeam.Name = "Niebieski Zespół"local function getUserIds(team : Team) : {number}local userIds = {}for _, player : Player in team:GetPlayers() dotable.insert(userIds, player.UserId)endreturn userIdsendlocal function getDevices(team : Team) : {AudioDeviceInput}local devices = {}for _, player : Player in team:GetPlayers() dolocal device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")if not device thencontinueendtable.insert(devices, device)endreturn devicesendlocal function updateTeam(team : Team)local users = getUserIds(team)for _, device in getDevices(team) dodevice.AccessType = Enum.AccessModifierType.Allowdevice:SetUserIdAccessList(users)endendlocal function onDeviceAdded(device : AudioDeviceInput)local player : Player = device.Parentif player.Team thenupdateTeam(player.Team)endendlocal function onPlayerAdded(player : Player)local device = player:FindFirstChild("AudioDeviceInput")if device thenonDeviceAdded(device)endplayer.ChildAdded:Connect(function(child)if child.Name == "AudioDeviceInput" thenonDeviceAdded(child)endend)endupdateTeam(blueTeam)updateTeam(redTeam)for _, player in Players:GetPlayers() doonPlayerAdded(player)endPlayers.PlayerAdded:Connect(onPlayerAdded)blueTeam.PlayerAdded:Connect(function() updateTeam(blueTeam) end)blueTeam.PlayerRemoved:Connect(function() updateTeam(blueTeam) end)redTeam.PlayerAdded:Connect(function() updateTeam(redTeam) end)redTeam.PlayerRemoved:Connect(function() updateTeam(redTeam) end)Wyjaśnienie koduSkrypt zaczyna od uzyskania usług Teams i Players, aby móc korzystać z ich funkcjonalności do sortowania graczy w zespoły, gdy tylko dołączają do gry. Na przykład, bez dodatkowego wysiłku w skryptowaniu, usługa Teams obsługuje takie działania jak:
- Równomierne sortowanie i balansowanie graczy w każdym zespole.
- Grupowanie graczy pod ich zespołem na tablicy wyników.
- Zabarwianie nazw graczy w przestrzeni 3D na odpowiadający kolor zespołu.
Korzystając z tej usługi, skrypt tworzy dwa odrębne obiekty Team z różnymi wartościami właściwości Color, aby reprezentować każdy zespół: jasnoczerwony dla jednego zespołu i jasnoniebieski dla drugiego.
Skrypt następnie definiuje trzy funkcje, w których odbywa się większość pracy związanej z konfiguracją czatu głosowego zespołu:
- getUserIds - Zwraca tablicę userID dla wszystkich graczy w zespole.
- getDevices - Zwraca tablicę obiektów AudioDeviceInput dla wszystkich graczy w zespole. Każdy obiekt AudioDeviceInput reprezentuje fizyczny mikrofon gracza w rzeczywistości.
- updateTeam - Pobiera wszystkie userID z getUserIds, iteruje po obiektach AudioDeviceInput z getDevices, ustawia ich właściwość Enum.AccessModifierType na Allow, aby tylko userID w każdym zespole mogły słyszeć mikrofony swoich kolegów z drużyny, a następnie aktualizuje SetUserIdAccessList z userID z zespołu.
Reszta skryptu kontroluje, jak te funkcje i nasłuchiwacze zdarzeń współpracują ze sobą:
- Gdy nowy gracz dołącza do gry, skrypt sprawdza, czy gracz ma mikrofon i aktualizuje jego zespół.
- Gdy skrypt wykryje nowy obiekt AudioDeviceInput, wywołuje updateTeam dla odpowiedniego zespołu czerwonego lub niebieskiego.
- Gdy gracze dołączają lub opuszczają grę, skrypt łączy się z wydarzeniami PlayerAdded i PlayerRemoved, aby zaktualizować ustawienia każdego zespołu.
Przetestuj grę z kilkoma przyjaciółmi, aby upewnić się, że członkowie zespołu z każdego zespołu mogą słyszeć się nawzajem tylko przez czat głosowy.
Dodaj czat aktywowany przyciskiem
Czat aktywowany przyciskiem to konfiguracja czatu głosowego, w której gracze mogą aktywować swój mikrofon w grze tylko wtedy, gdy naciskają i przytrzymują określony przycisk na swoim urządzeniu. Integracja czatu aktywowanego przyciskiem w Twojej rozgrywce jest przydatna, gdy chcesz, aby gracze mieli większą prywatność i kontrolę nad tym, kiedy chcą być słyszani wśród innych graczy i hałasu otoczenia.
Aby odtworzyć czat głosowy aktywowany przyciskiem w przykładowym pliku Gingerbread Island - Czat Głosowy:
W oknie Eksplorator wstaw Skrypt do ReplicatedStorage.
W oknie Właściwości ustaw RunContext na Client, aby skrypt kontrolował tylko mikrofon lokalnego gracza.
Zmień nazwę skryptu na PushToChat, a następnie wklej poniższy kod do skryptu:
local Players = game:GetService("Players")local UserInputService = game:GetService("UserInputService")local audioIn: AudioDeviceInput = Players.LocalPlayer:WaitForChild("AudioDeviceInput")local pushToTalkKey = Enum.KeyCode.VaudioIn.Muted = trueUserInputService.InputBegan:Connect(function(input: InputObject)if input.KeyCode == pushToTalkKey thenaudioIn.Muted = falseendend)UserInputService.InputEnded:Connect(function(input: InputObject)if input.KeyCode == pushToTalkKey thenaudioIn.Muted = trueendend)Wyjaśnienie koduSkrypt zaczyna od uzyskania:
- Usługi Players, aby móc odwołać się do wszystkich graczy w grze.
- Usługi UserInputService, aby móc sprawdzić, kiedy gracz naciska przyciski na swoim urządzeniu.
- Obiektu AudioDeviceInput lokalnego gracza, czyli fizycznego mikrofonu na jego urządzeniu.
Skrypt następnie:
- Ustawia klawisz V jako przycisk, który gracz musi nacisnąć i przytrzymać, aby mówić do swojego mikrofonu.
- Wycisza mikrofon gracza.
Reszta skryptu ustawia dwa nasłuchiwacze zdarzeń dla InputBegan i InputEnded z UserInputService. Gdy naciskają klawisz V, zdarzenie InputBegan wycisza mikrofon gracza, a gdy zwalniają klawisz V, zdarzenie InputEnded ponownie wycisza ich mikrofon.
Przetestuj grę, aby upewnić się, że gracze mogą słyszeć się nawzajem przez czat głosowy tylko wtedy, gdy naciskają klawisz V.
Dodaj czat oparty na czasie
Czat oparty na czasie to konfiguracja czatu głosowego, w której gracze mogą mówić i słyszeć się nawzajem tylko w określonym czasie. Integracja czatu opartego na czasie w Twojej rozgrywce jest przydatna, gdy chcesz, aby gracze starannie planowali, jak komunikują się ze sobą w określonych fazach, takich jak podczas dyskusji opartych na rundach lub po scenkach przerywnikowych.
Aby odtworzyć czat głosowy oparty na czasie w przykładowym pliku Gingerbread Island - Czat Głosowy:
W oknie Eksplorator wstaw Skrypt do ServerScriptService.
Zmień nazwę skryptu na TimeBasedChat, a następnie wklej poniższy kod do skryptu:
local Players = game:GetService("Players")local muteAll = falselocal function toggleMuteAll()muteAll = not muteAllfor _, player in Players:GetPlayers() dolocal device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")if not device thencontinueenddevice.Muted = muteAllendendwhile true dotask.wait(15) -- co 15 sekundtoggleMuteAll() -- albo pozwól ludziom mówić, albo zapobiegaj ich mówieniuendWyjaśnienie koduTen skrypt zaczyna od uzyskania usługi Players, aby móc odwołać się do jej funkcjonalności w zarządzaniu wszystkimi graczami w grze. Następnie ustawia flagę muteAll na false, którą następnie wykorzystuje funkcja toggleMuteAll do przełączania czatu głosowego włączonego i wyłączonego.
Przyjrzyjmy się funkcji toggleMuteAll:
- Zaczyna od iteracji przez wszystkich graczy w grze za pomocą Players.GetPlayers.
- Dla każdego gracza sprawdza, czy ma obiekt podrzędny AudioDeviceInput, czyli fizyczny mikrofon na swoim urządzeniu.
- Jeśli tak, funkcja ustawia właściwość AudioDeviceInput obiektu Muted na wartość muteAll. Na przykład, jeśli muteAll jest true, mikrofon gracza jest wyłączony, a jeśli muteAll jest false, mikrofon gracza jest włączony.
Skrypt następnie wchodzi w nieskończoną pętlę, czekając 15 sekund, aby wyciszyć i odciszyć wszystkie obiekty AudioDeviceInput.
Przetestuj grę, aby upewnić się, że gracze mogą słyszeć się nawzajem przez czat głosowy w 15-sekundowych odstępach.