Trò chuyện thoại là một tính năng trò chuyện dựa trên khoảng cách mô phỏng việc 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ọ 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 trò 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 trong thời gian thực trên toàn cầu để hoàn thành các mục tiêu của trải nghiệm của bạn.
Bằng cách sử dụng tệp Gingerbread Island - Voice Chat .rbxl làm tài liệu tham khảo, hướng dẫn này cho bạn thấy cách tích hợp các hình thức trò chuyện thoạ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 thoại với các đồng đội của họ.
- Cho phép người chơi kích hoạt tạm thời micro của họ trong khi họ nhấn một nút cụ thể trên thiết bị của họ.
- Cấu hình thời gian mà trò chuyện thoại được bật hoặc tắt.
Khi bạn xem các phần sau đây cùng với mẫu, bạn có thể điều chỉnh từng mẫu mã để đáp ứng tốt hơn các yêu cầu trò chuyện thoạ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 chính xác, bạn phải cấu hình thiết lập trò chuyện thoại của bạn để bật trò chuyện thoạ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ải nghiệm của bạn, thiết lập trò chuyện thoại của bạn hiện tại:
- Cho phép những người chơi đủ điều kiện về thoại sử dụng micro của họ.
- Tạo và cha mẹ một đối tượng AudioDeviceInput dưới mỗi đối tượng Player đủ điều kiện về thoại.
- Tạo và cha mẹ một đối tượng AudioEmitter dưới mỗi đối tượng Player.Character đủ điều kiện về thoại.
- Tạo và cha mẹ một AudioListener dưới Workspace.CurrentCamera.
Các phần sau đây chi tiết ba cấu hình trò chuyện thoại độc đáo bằng cách sử dụng các cài đặt này. Khi bạn làm theo cùng với tệp mẫu Gingerbread Island - Voice Chat, bạn có thể kích hoạt tập lệnh đã 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, hãy chắc chắn tắt tập lệnh đó 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 thoạ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ải nghiệm. 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 vấn đề trong các trải nghiệm, 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 thoạ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 tập lệnh thành TeamChat, sau đó dán mã sau vào tập lệnh:
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 = "Đội Đỏ"local blueTeam = Instance.new("Team", Teams)blueTeam.TeamColor = BrickColor.new("Bright blue")blueTeam.AutoAssignable = trueblueTeam.Name = "Đội Xanh"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ãTập lệnh bắt đầu bằng cách lấy Teams và Players dịch vụ để nó có thể sử dụng chức năng sẵn có của chúng để phân loại người chơi thành các đội ngay khi họ tham gia trải nghiệm. 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 ở mỗi đội.
- Nhóm người chơi dưới đội của họ trên bảng xếp hạng.
- Màu tên người chơi trong không gian 3D theo màu của đội tương ứng.
Sử dụng dịch vụ này, tập lệnh tạo ra hai đối tượng Team khác biệt với các thuộc tính giá trị 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.
Tập lệnh sau đó xác định 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 thoại theo đội:
- getUserIds - Trả về một mảng các 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 AudioDeviceInput đại diện cho micro vật lý của người chơi trong thế giới thực.
- updateTeam - Nhận 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ỉ cho phép các userIDs trong mỗi đội nghe từ micro của đồng đội của họ, sau đó cập nhật SetUserIdAccessList với các userIDs từ đội.
Phần còn lại của tập lệnh điều khiển cách các hàm này và các bộ lắng nghe sự kiện hoạt động cùng nhau:
- Khi một người chơi mới tham gia trải nghiệm, tập lệnh xác minh xem người chơi có micro hay không và cập nhật đội của họ.
- Khi tập lệnh 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ải nghiệm, tập lệnh 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ải nghiệm với một vài người bạn để xác minh rằng những đồng đội của mỗi đội chỉ có thể nghe nhau qua trò chuyện thoại.
Thêm nhấn để trò chuyện
Nhấn để trò chuyện là một cấu hình trò chuyện thoại trong đó người chơi chỉ có thể kích hoạt micro của họ trong một trải nghiệm 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 hơn khi họ muốn được nghe qua các người chơi khác và tiếng ồn xung quanh.
Để tái tạo trò chuyện thoạ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 để tập lệnh chỉ kiểm soát micro của người chơi địa phương.
Đổi tên tập lệnh thành PushToChat, sau đó dán mã sau vào tập lệnh:
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ãTập lệnh bắt đầu bằng cách lấy:
- Dịch vụ Players để nó có thể tham chiếu đến tất cả người chơi trong trải nghiệm.
- Dịch vụ UserInputService để nó 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ọ.
Tập lệnh sau đó:
- Đặt nút 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 tập lệnh thiết lập hai bộ lắng nghe sự kiện cho InputBegan và InputEnded từ UserInputService. Khi họ nhấn nút V, sự kiện InputBegan sẽ bật tiếng micro của người chơi, và khi họ thả nút V, sự kiện InputEnded sẽ tắt tiếng micro của họ một lần nữa.
Chơi thử trải nghiệm để xác minh rằng người chơi chỉ có thể nghe nhau qua trò chuyện thoại khi họ đang nhấn nút 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 thoại trong đó người chơi chỉ có thể nói và nghe nhau trong một khoảng thời gian đã đị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ập 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 thoạ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 tập lệnh thành TimeBasedChat, sau đó dán mã sau vào tập lệnh:
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) --every 15 secondstoggleMuteAll() --either allow people to speak, or prevent them from speakingendGiải thích mãTập lệnh này bắt đầu bằng cách lấy dịch vụ Players để nó 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ải nghiệm. Sau đó nó thiết lập một cờ muteAll là false, mà hàm sau toggleMuteAll sử dụng để bật và tắt trò chuyện thoạ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ải nghiệm 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 AudioDeviceInput, hoặc micro vật lý trên thiết bị của họ không.
- Nếu có, hàm sẽ đặt thuộc tính Muted 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.
Tập lệnh sau đó đi vào một vòng lặp vô hạn, chờ 15 giây để tắt tiếng và bật tiếng cho tất cả các đối tượng AudioDeviceInput.
Chơi thử trải nghiệm để xác minh rằng người chơi chỉ có thể nghe nhau qua trò chuyện thoại trong các khoảng thời gian 15 giây.