Hướng dẫn trung cấp

Thêm trò chuyện thoại

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

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.

Các tập lệnh đã vô hiệu hóa trong cửa sổ Explorer

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:

  1. Trong cửa sổ Explorer, chèn một Script vào ServerScriptService.

  2. Đổ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 = true
    redTeam.Name = "Đội Đỏ"
    local blueTeam = Instance.new("Team", Teams)
    blueTeam.TeamColor = BrickColor.new("Bright blue")
    blueTeam.AutoAssignable = true
    blueTeam.Name = "Đội Xanh"
    local function getUserIds(team : Team) : {number}
    local userIds = {}
    for _, player : Player in team:GetPlayers() do
    table.insert(userIds, player.UserId)
    end
    return userIds
    end
    local function getDevices(team : Team) : {AudioDeviceInput}
    local devices = {}
    for _, player : Player in team:GetPlayers() do
    local device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")
    if not device then
    continue
    end
    table.insert(devices, device)
    end
    return devices
    end
    local function updateTeam(team : Team)
    local users = getUserIds(team)
    for _, device in getDevices(team) do
    device.AccessType = Enum.AccessModifierType.Allow
    device:SetUserIdAccessList(users)
    end
    end
    local function onDeviceAdded(device : AudioDeviceInput)
    local player : Player = device.Parent
    if player.Team then
    updateTeam(player.Team)
    end
    end
    local function onPlayerAdded(player : Player)
    local device = player:FindFirstChild("AudioDeviceInput")
    if device then
    onDeviceAdded(device)
    end
    player.ChildAdded:Connect(function(child)
    if child.Name == "AudioDeviceInput" then
    onDeviceAdded(child)
    end
    end)
    end
    updateTeam(blueTeam)
    updateTeam(redTeam)
    for _, player in Players:GetPlayers() do
    onPlayerAdded(player)
    end
    Players.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)

    Tập lệnh bắt đầu bằng cách lấy TeamsPlayers 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 PlayerAddedPlayerRemoved để cập nhật cài đặt của mỗi đội.
  3. 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:

  1. Trong cửa sổ Explorer, chèn một Script vào ReplicatedStorage.

  2. 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.

  3. Đổ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.V
    audioIn.Muted = true
    UserInputService.InputBegan:Connect(function(input: InputObject)
    if input.KeyCode == pushToTalkKey then
    audioIn.Muted = false
    end
    end)
    UserInputService.InputEnded:Connect(function(input: InputObject)
    if input.KeyCode == pushToTalkKey then
    audioIn.Muted = true
    end
    end)

    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 InputBeganInputEnded 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.

  4. 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:

  1. Trong cửa sổ Explorer, chèn một Script vào ServerScriptService.

  2. Đổ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 = false
    local function toggleMuteAll()
    muteAll = not muteAll
    for _, player in Players:GetPlayers() do
    local device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")
    if not device then
    continue
    end
    device.Muted = muteAll
    end
    end
    while true do
    task.wait(15) --every 15 seconds
    toggleMuteAll() --either allow people to speak, or prevent them from speaking
    end

    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ờ muteAllfalse, 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 muteAlltrue, micro của người chơi sẽ bị tắt, và nếu muteAllfalse, 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.

  3. 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.

©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.