Trò chuyện bằng giọng nói là một tính năng trò chuyện dựa trên khoảng cách, mô phỏng giao tiếp thực tế bằng cách điều chỉnh âm lượng của người chơi khi họ nói khi di chuyển gần hơn hoặc xa hơn nhau trong không gian 3D. Bằng cách cho phép người chơi nói chuyện với nhau qua micro của họ, họ có thể giao lưu và lập chiến lược cùng nhau theo thời gian thực trên toàn cầu để hoàn thành các mục tiêu của trò chơi của bạn.
Sử dụng tệp .rbxl Gingerbread Island - Voice Chat làm tài liệu tham khảo, hướng dẫn này cho bạn biết cách tích hợp các hình thức trò chuyện bằng giọng nói khác nhau vào gameplay của bạn, bao gồm hướng dẫn về:
- Phân loại người chơi thành các đội chỉ có thể sử dụng trò chuyện bằng giọng nói với đồng đội của họ.
- Cho phép người chơi tạm thời kích hoạt micro của họ trong khi họ đang nhấn một nút cụ thể trên thiết bị của họ.
- Cấu hình các khoảng thời gian mà trò chuyện bằng giọng nói được bật hoặc tắt.
Khi bạn xem xét các phần sau cùng với mẫu, bạn có thể điều chỉnh từng mẫu mã để phù hợp hơn với nhu cầu trò chuyện bằng giọng nói của riêng bạn.
Cấu hình cài đặt
Để trò chuyện theo đội, nhấn để trò chuyện, hoặc trò chuyện theo thời gian hoạt động đúng cách, bạn phải cấu hình thiết lập trò chuyện bằng giọng nói của bạn để bật trò chuyện bằng giọng nói và tạo các đối tượng âm thanh cần thiết để thu và phát âm thanh trong môi trường 3D.
Khi người chơi tham gia trò chơi của bạn, thiết lập trò chuyện bằng giọng nói của bạn bây giờ:
- Cho phép những người chơi đủ điều kiện sử dụng micro của họ.
- Tạo và gán một đối tượng AudioDeviceInput dưới mỗi đối tượng Player đủ điều kiện.
- Tạo và gán một đối tượng AudioEmitter dưới mỗi Player.Character đủ điều kiện.
- Tạo và gán một AudioListener dưới Workspace.CurrentCamera.
Các phần sau đây chi tiết ba cấu hình trò chuyện bằng giọng nói độc đáo sử dụng các cài đặt này. Khi bạn theo dõi cùng với tệp mẫu Gingerbread Island - Voice Chat, bạn có thể bật kịch bản bị vô hiệu hóa tương ứng trong cửa sổ Explorer để kiểm tra hành vi của chúng. Để đảm bảo rằng mỗi cái hoạt động đúng cách, hãy chắc chắn tắt kịch bản một lần nữa trước khi chuyển sang cấu hình tiếp theo.

Thêm trò chuyện theo đội
Trò chuyện theo đội là một cấu hình trò chuyện bằng giọng nói trong đó chỉ những người chơi trong cùng một đội có thể nói hoặc nghe nhau trong một trò chơi. Tích hợp trò chuyện theo đội vào gameplay của bạn rất hữu ích khi bạn muốn người chơi hợp tác và lập chiến lược cùng nhau để giải quyết các vấn đề trong trò chơi, chẳng hạn như phối hợp thông tin về vị trí đội đối thủ, tài nguyên và nhiệm vụ.
Để tái tạo trò chuyện bằng giọng nói theo đội trong tệp mẫu Gingerbread Island - Voice Chat:
Trong cửa sổ Explorer, chèn một Script vào ServerScriptService.
Đổi tên kịch bản thành TeamChat, sau đó dán mã sau vào kịch bản:
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 = "Red Team"local blueTeam = Instance.new("Team", Teams)blueTeam.TeamColor = BrickColor.new("Bright blue")blueTeam.AutoAssignable = trueblueTeam.Name = "Blue Team"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)Giải thích mãKịch bản bắt đầu bằng cách lấy các dịch vụ Teams và Players để có thể sử dụng chức năng có sẵn của chúng để phân loại người chơi vào các đội ngay khi họ tham gia trò chơi. Ví dụ, mà không cần thêm nỗ lực lập trình, dịch vụ Teams xử lý các hành động như:
- Phân loại và cân bằng người chơi đều vào mỗi đội.
- Nhóm người chơi dưới đội của họ trên bảng xếp hạng.
- Tô màu tên người chơi trong không gian 3D theo màu sắc tương ứng của đội họ.
Sử dụng dịch vụ này, kịch bản tạo ra hai đối tượng Team khác nhau với các giá trị thuộc tính Color khác nhau để đại diện cho mỗi đội: đỏ sáng cho một đội và xanh sáng cho đội còn lại.
Kịch bản sau đó định nghĩa ba hàm mà phần lớn công việc diễn ra để thiết lập cấu hình trò chuyện bằng giọng nói theo đội:
- getUserIds - Trả về một mảng userIDs cho tất cả người chơi trong một đội.
- getDevices - Trả về một mảng các đối tượng AudioDeviceInput cho tất cả người chơi trong một đội. Mỗi đối tượng Class.AudioDeviceInput đại diện cho micro vật lý của một người chơi trong thế giới thực.
- updateTeam - Lấy tất cả userIDs từ getUserIds, lặp qua các đối tượng AudioDeviceInput từ getDevices, đặt thuộc tính Enum.AccessModifierType của chúng thành Allow để chỉ những userIDs trong mỗi đội được phép nghe từ micro của đồng đội, sau đó cập nhật SetUserIdAccessList với các userIDs từ đội.
Phần còn lại của kịch bản điều khiển cách các hàm và trình lắng nghe sự kiện này hoạt động cùng nhau:
- Khi một người chơi mới tham gia trò chơi, kịch bản xác minh xem người chơi có micro hay không và cập nhật đội của họ.
- Khi kịch bản phát hiện một đối tượng AudioDeviceInput mới, nó gọi updateTeam cho đội đỏ hoặc xanh tương ứng của họ.
- Khi người chơi tham gia hoặc rời khỏi trò chơi, kịch bản kết nối với các sự kiện PlayerAdded và PlayerRemoved để cập nhật cài đặt của mỗi đội.
Chơi thử trò chơi với một vài người bạn để xác minh rằng các đồng đội trong mỗi đội chỉ có thể nghe nhau qua trò chuyện bằng giọng nói.
Thêm nhấn để trò chuyện
Nhấn để trò chuyện là một cấu hình trò chuyện bằng giọng nói trong đó người chơi chỉ có thể kích hoạt micro của họ trong một trò chơi khi họ nhấn và giữ một nút cụ thể trên thiết bị của họ. Tích hợp nhấn để trò chuyện vào gameplay của bạn rất hữu ích khi bạn muốn người chơi có nhiều quyền riêng tư và kiểm soát khi họ muốn được nghe qua những người chơi khác và tiếng ồn xung quanh.
Để tái tạo trò chuyện bằng giọng nói nhấn trong tệp mẫu Gingerbread Island - Voice Chat:
Trong cửa sổ Explorer, chèn một Script vào ReplicatedStorage.
Trong cửa sổ Properties, đặt RunContext thành Client để kịch bản chỉ điều khiển micro của người chơi địa phương.
Đổi tên kịch bản thành PushToChat, sau đó dán mã sau vào kịch bản:
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)Giải thích mãKịch bản bắt đầu bằng cách lấy:
- Dịch vụ Players để có thể tham chiếu tất cả người chơi trong trò chơi.
- Dịch vụ UserInputService để có thể kiểm tra khi một người chơi nhấn các nút trên thiết bị của họ.
- Đối tượng AudioDeviceInput của người chơi địa phương, hoặc micro vật lý trên thiết bị của họ.
Kịch bản sau đó:
- Đặt phím V là nút mà người chơi cần nhấn và giữ để nói vào micro của họ.
- Tắt tiếng micro của người chơi.
Phần còn lại của kịch bản thiết lập hai trình lắng nghe sự kiện cho InputBegan và InputEnded từ UserInputService. Khi họ nhấn phím V, sự kiện InputBegan sẽ bật tiếng micro của người chơi, và khi họ thả phím V, sự kiện InputEnded sẽ tắt tiếng micro của họ một lần nữa.
Chơi thử trò chơi để xác minh rằng người chơi chỉ có thể nghe nhau qua trò chuyện bằng giọng nói khi họ đang nhấn phím V.
Thêm trò chuyện theo thời gian
Trò chuyện theo thời gian là một cấu hình trò chuyện bằng giọng nói trong đó người chơi chỉ có thể nói và nghe nhau trong một khoảng thời gian nhất định. Tích hợp trò chuyện theo thời gian vào gameplay của bạn rất hữu ích khi bạn muốn người chơi lên kế hoạch cẩn thận cách họ giao tiếp với nhau trong các giai đoạn cụ thể, chẳng hạn như trong các cuộc thảo luận theo vòng hoặc sau các cảnh cắt.
Để tái tạo trò chuyện bằng giọng nói theo thời gian trong tệp mẫu Gingerbread Island - Voice Chat:
Trong cửa sổ Explorer, chèn một Script vào ServerScriptService.
Đổi tên kịch bản thành TimeBasedChat, sau đó dán mã sau vào kịch bản:
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) -- mỗi 15 giâytoggleMuteAll() -- cho phép mọi người nói hoặc ngăn họ nóiendGiải thích mãKịch bản này bắt đầu bằng cách lấy dịch vụ Players để có thể tham chiếu đến chức năng của nó để quản lý tất cả người chơi trong trò chơi. Sau đó, nó đặt một cờ muteAll thành false, mà hàm toggleMuteAll sau đây sử dụng để bật và tắt trò chuyện bằng giọng nói.
Hãy xem xét hàm toggleMuteAll:
- Nó bắt đầu bằng cách lặp qua tất cả người chơi trong trò chơi bằng cách sử dụng Players.GetPlayers.
- Đối với mỗi người chơi, nó kiểm tra xem họ có một đối tượng con AudioDeviceInput, hoặc micro vật lý trên thiết bị của họ hay không.
- Nếu có, hàm sẽ đặt thuộc tính AudioDeviceInput của đối tượng AudioDeviceInput thành giá trị của muteAll. Ví dụ, nếu muteAll là true, micro của người chơi sẽ bị tắt, và nếu muteAll là false, micro của người chơi sẽ được bật.
Kịch bản sau đó vào một vòng lặp vô hạn, chờ 15 giây để tắt và bật tiếng tất cả các đối tượng AudioDeviceInput.
Chơi thử trò chơi để xác minh rằng người chơi chỉ có thể nghe nhau qua trò chuyện bằng giọng nói trong các khoảng thời gian 15 giây.