เพิ่มการสนทนาด้วยเสียง

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

การสนทนาด้วยเสียง เป็นฟีเจอร์การสนทนาที่อิงจากระยะทางซึ่งจำลองการสื่อสารที่สมจริงโดยการปรับระดับเสียงของผู้เล่นที่พูดเมื่อพวกเขาเคลื่อนที่เข้าใกล้หรือไกลออกจากกันในพื้นที่ 3D โดยการให้ผู้เล่นพูดคุยกันด้วยไมโครโฟนของพวกเขา พวกเขาสามารถเข้าสังคมและวางกลยุทธ์ร่วมกันแบบเรียลไทม์ทั่วโลกเพื่อทำภารกิจในเกมของคุณให้สำเร็จ

โดยใช้ไฟล์ Gingerbread Island - Voice Chat .rbxl เป็นข้อมูลอ้างอิง บทช่วยสอนนี้จะแสดงให้คุณเห็นวิธีการรวมรูปแบบต่าง ๆ ของการสนทนาด้วยเสียงเข้ากับการเล่นเกมของคุณ รวมถึงคำแนะนำเกี่ยวกับ:

  • การจัดกลุ่มผู้เล่นเป็นทีมที่สามารถใช้การสนทนาด้วยเสียงกับเพื่อนร่วมทีมได้เท่านั้น
  • การอนุญาตให้ผู้เล่นเปิดไมโครโฟนชั่วคราวในขณะที่พวกเขากดปุ่มเฉพาะบนอุปกรณ์ของตน
  • การกำหนดช่วงเวลาที่การสนทนาด้วยเสียงจะเปิดหรือปิด

เมื่อคุณตรวจสอบส่วนต่าง ๆ ต่อไปนี้พร้อมกับตัวอย่าง คุณสามารถปรับแต่งตัวอย่างโค้ดแต่ละตัวให้ตรงกับความต้องการของการสนทนาด้วยเสียงของคุณได้ดียิ่งขึ้น

กำหนดค่าการตั้งค่า

เพื่อให้การสนทนาทีม การกดเพื่อสนทนา หรือการสนทนาตามเวลา ทำงานได้อย่างเหมาะสม คุณต้อง กำหนดค่าการตั้งค่าการสนทนาด้วยเสียงของคุณ เพื่อเปิดใช้งานการสนทนาด้วยเสียงและสร้างวัตถุเสียงที่เหมาะสมที่จำเป็นสำหรับการรับและปล่อยเสียงภายในสภาพแวดล้อม 3D

เมื่อผู้เล่นเข้าร่วมเกมของคุณ การตั้งค่าการสนทนาด้วยเสียงของคุณจะ:

  • อนุญาตให้ผู้เล่นที่มีสิทธิ์ใช้ไมโครโฟนของตน
  • สร้างและเป็นเจ้าของวัตถุ AudioDeviceInput ภายใต้แต่ละวัตถุ Player ที่มีสิทธิ์
  • สร้างและเป็นเจ้าของวัตถุ AudioEmitter ภายใต้แต่ละ Player.Character ที่มีสิทธิ์
  • สร้างและเป็นเจ้าของ AudioListener ภายใต้ Workspace.CurrentCamera

ส่วนต่อไปนี้จะอธิบายการกำหนดค่าการสนทนาด้วยเสียงที่ไม่ซ้ำกันสามแบบโดยใช้การตั้งค่าเหล่านี้ ขณะที่คุณติดตามตัวอย่างไฟล์ Gingerbread Island - Voice Chat คุณสามารถเปิดใช้งานสคริปต์ที่ปิดใช้งานในหน้าต่าง Explorer เพื่อทดสอบพฤติกรรมของพวกเขา เพื่อให้แน่ใจว่าทุกอย่างทำงานได้อย่างถูกต้อง โปรดปิดใช้งานสคริปต์อีกครั้งก่อนที่จะไปยังการกำหนดค่าถัดไป

สคริปต์ที่ปิดใช้งานในหน้าต่าง Explorer

เพิ่มการสนทนาทีม

การสนทนาทีม เป็นการกำหนดค่าการสนทนาด้วยเสียงที่ผู้เล่นในทีมเดียวกันสามารถพูดหรือได้ยินกันและกันในเกมได้เท่านั้น การรวมการสนทนาทีมเข้ากับการเล่นเกมของคุณมีประโยชน์เมื่อคุณต้องการให้ผู้เล่นร่วมมือและวางกลยุทธ์ร่วมกันเพื่อแก้ปัญหาในเกม เช่น การประสานข้อมูลเกี่ยวกับตำแหน่งของทีมศัตรู ทรัพยากร และการมอบหมายงาน

ในการสร้างการสนทนาด้วยเสียงทีมในไฟล์ตัวอย่าง Gingerbread Island - Voice Chat:

  1. ในหน้าต่าง Explorer ให้แทรก Script ลงใน ServerScriptService

  2. เปลี่ยนชื่อสคริปต์เป็น TeamChat จากนั้นวางโค้ดต่อไปนี้ลงในสคริปต์:

    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 = "Red Team"
    local blueTeam = Instance.new("Team", Teams)
    blueTeam.TeamColor = BrickColor.new("Bright blue")
    blueTeam.AutoAssignable = true
    blueTeam.Name = "Blue Team"
    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)

    สคริปต์เริ่มต้นด้วยการดึงข้อมูลจาก Teams และ Players เพื่อให้สามารถใช้ฟังก์ชันการทำงานที่มีอยู่แล้วในการจัดกลุ่มผู้เล่นเป็นทีมเมื่อพวกเขาเข้าร่วมเกม ตัวอย่างเช่น โดยไม่ต้องใช้การเขียนสคริปต์เพิ่มเติม บริการ Teams จะจัดการการกระทำเช่น:

    • การจัดกลุ่มและการปรับสมดุลผู้เล่นให้เท่าเทียมกันในแต่ละทีม
    • การจัดกลุ่มผู้เล่นภายใต้ทีมของพวกเขาในกระดานผู้นำ
    • การเปลี่ยนสีชื่อผู้เล่นในพื้นที่ 3D ให้ตรงกับสีทีมของพวกเขา

    โดยใช้บริการนี้ สคริปต์จะสร้างวัตถุ Team สองตัวที่แตกต่างกันด้วยค่าคุณสมบัติ Color ที่แตกต่างกันเพื่อแทนที่แต่ละทีม: สีแดงสด สำหรับทีมหนึ่งและ สีน้ำเงินสด สำหรับอีกทีมหนึ่ง

    สคริปต์จะกำหนดฟังก์ชันสามฟังก์ชันซึ่งเป็นจุดที่ทำงานหลักในการตั้งค่าการสนทนาด้วยเสียงทีม:

    • getUserIds - คืนค่าอาร์เรย์ของ userIDs สำหรับผู้เล่นทั้งหมดในทีม
    • getDevices - คืนค่าอาร์เรย์ของวัตถุ AudioDeviceInput สำหรับผู้เล่นทั้งหมดในทีม ทุกวัตถุ Class.AudioDeviceInput แทนไมโครโฟน ทางกายภาพ ของผู้เล่นในโลกจริง
    • updateTeam - ดึง userIDs ทั้งหมดจาก getUserIds ทำการวนซ้ำผ่านวัตถุ AudioDeviceInput จาก getDevices ตั้งค่าคุณสมบัติ Enum.AccessModifierType เป็น Allow เพื่อให้เฉพาะ userIDs ในแต่ละทีมได้รับอนุญาตให้ได้ยินจากไมโครโฟนของเพื่อนร่วมทีม จากนั้นอัปเดต SetUserIdAccessList ด้วย userIDs จากทีม

    ส่วนที่เหลือของสคริปต์ควบคุมวิธีการทำงานร่วมกันของฟังก์ชันเหล่านี้และตัวฟังเหตุการณ์:

    • เมื่อผู้เล่นใหม่เข้าร่วมเกม สคริปต์จะตรวจสอบว่าผู้เล่นมีไมโครโฟนหรือไม่และอัปเดตทีมของพวกเขา
    • เมื่อสคริปต์ตรวจพบวัตถุ AudioDeviceInput ใหม่ มันจะเรียก updateTeam สำหรับทีมสีแดงหรือสีน้ำเงินที่เกี่ยวข้อง
    • ขณะที่ผู้เล่นเข้าร่วมหรือออกจากเกม สคริปต์จะเชื่อมต่อกับเหตุการณ์ PlayerAdded และ PlayerRemoved เพื่ออัปเดตการตั้งค่าของแต่ละทีม
  3. ทดสอบเกมกับเพื่อนสองสามคนเพื่อยืนยันว่าทีมจากแต่ละทีมสามารถได้ยินกันได้เฉพาะผ่านการสนทนาด้วยเสียงเท่านั้น

เพิ่มการกดเพื่อสนทนา

การกดเพื่อสนทนา เป็นการกำหนดค่าการสนทนาด้วยเสียงที่ผู้เล่นสามารถเปิดไมโครโฟนได้เฉพาะในเกมในขณะที่พวกเขากดและถือปุ่มเฉพาะบนอุปกรณ์ของตน การรวมการกดเพื่อสนทนาเข้ากับการเล่นเกมของคุณมีประโยชน์เมื่อคุณต้องการให้ผู้เล่นมีความเป็นส่วนตัวและควบคุมมากขึ้นเมื่อพวกเขาต้องการให้ได้ยินเหนือผู้เล่นคนอื่นและเสียงรบกวนรอบข้าง

ในการสร้างการสนทนาด้วยเสียงแบบกดในไฟล์ตัวอย่าง Gingerbread Island - Voice Chat:

  1. ในหน้าต่าง Explorer ให้แทรก Script ลงใน ReplicatedStorage

  2. ในหน้าต่าง Properties ให้ตั้งค่า RunContext เป็น Client เพื่อให้สคริปต์ควบคุมไมโครโฟนของผู้เล่นท้องถิ่นเท่านั้น

  3. เปลี่ยนชื่อสคริปต์เป็น PushToChat จากนั้นวางโค้ดต่อไปนี้ลงในสคริปต์:

    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)

    สคริปต์เริ่มต้นด้วยการดึงข้อมูล:

    • บริการ Players เพื่อให้สามารถอ้างอิงผู้เล่นทั้งหมดในเกม
    • บริการ UserInputService เพื่อให้สามารถตรวจสอบเมื่อผู้เล่นกดปุ่มบนอุปกรณ์ของตน
    • วัตถุ AudioDeviceInput ของผู้เล่นท้องถิ่น หรือไมโครโฟนทางกายภาพบนอุปกรณ์ของพวกเขา

    สคริปต์จะ:

    • ตั้งค่าปุ่ม V ให้เป็นปุ่มที่ผู้เล่นต้องกดและถือเพื่อพูดในไมโครโฟนของตน
    • ปิดเสียงไมโครโฟนของผู้เล่น

    ส่วนที่เหลือของสคริปต์จะตั้งค่าตัวฟังเหตุการณ์สองตัวสำหรับ InputBegan และ InputEnded จาก UserInputService เมื่อพวกเขากดปุ่ม V เหตุการณ์ InputBegan จะเปิดเสียงไมโครโฟนของผู้เล่น และเมื่อพวกเขาปล่อยปุ่ม V เหตุการณ์ InputEnded จะปิดเสียงไมโครโฟนของพวกเขาอีกครั้ง

  4. ทดสอบเกมเพื่อยืนยันว่าผู้เล่นสามารถได้ยินกันได้เฉพาะผ่านการสนทนาด้วยเสียงเมื่อพวกเขากดปุ่ม V เท่านั้น

เพิ่มการสนทนาตามเวลา

การสนทนาตามเวลา เป็นการกำหนดค่าการสนทนาด้วยเสียงที่ผู้เล่นสามารถพูดและได้ยินกันได้เฉพาะในช่วงเวลาที่กำหนด การรวมการสนทนาตามเวลาเข้ากับการเล่นเกมของคุณมีประโยชน์เมื่อคุณต้องการให้ผู้เล่นวางแผนอย่างรอบคอบเกี่ยวกับวิธีการสื่อสารกับกันและกันในช่วงเฉพาะ เช่น ในระหว่างการอภิปรายตามรอบหรือหลังจากฉากตัด

ในการสร้างการสนทนาด้วยเสียงตามเวลาในไฟล์ตัวอย่าง Gingerbread Island - Voice Chat:

  1. ในหน้าต่าง Explorer ให้แทรก Script ลงใน ServerScriptService

  2. เปลี่ยนชื่อสคริปต์เป็น TimeBasedChat จากนั้นวางโค้ดต่อไปนี้ลงในสคริปต์:

    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) -- ทุก ๆ 15 วินาที
    toggleMuteAll() -- อนุญาตให้ผู้คนพูดหรือป้องกันไม่ให้พวกเขาพูด
    end

    สคริปต์นี้เริ่มต้นด้วยการดึงบริการ Players เพื่อให้สามารถอ้างอิงฟังก์ชันการทำงานในการจัดการผู้เล่นทั้งหมดในเกม มันจะตั้งค่าสถานะ muteAll เป็น false ซึ่งฟังก์ชัน toggleMuteAll ต่อไปนี้จะใช้เพื่อเปิดและปิดการสนทนาด้วยเสียง

    มาดูฟังก์ชัน toggleMuteAll:

    • มันเริ่มต้นด้วยการวนซ้ำผ่านผู้เล่นทั้งหมดในเกมโดยใช้ Players.GetPlayers
    • สำหรับผู้เล่นแต่ละคน มันจะตรวจสอบว่ามีวัตถุ AudioDeviceInput หรือไมโครโฟนทางกายภาพบนอุปกรณ์ของพวกเขาหรือไม่
    • หากมี ฟังก์ชันจะตั้งค่าคุณสมบัติ AudioDeviceInput ของวัตถุ AudioDeviceInput เป็นค่าของ muteAll ตัวอย่างเช่น หาก muteAll เป็น true ไมโครโฟนของผู้เล่นจะถูกปิด และหาก muteAll เป็น false ไมโครโฟนของผู้เล่นจะถูกเปิด

    สคริปต์จะเข้าสู่วงจรไม่สิ้นสุด รอ 15 วินาทีเพื่อปิดเสียงและเปิดเสียงวัตถุ AudioDeviceInput ทั้งหมด

  3. ทดสอบเกมเพื่อยืนยันว่าผู้เล่นสามารถได้ยินกันได้เฉพาะผ่านการสนทนาด้วยเสียงในช่วงเวลา 15 วินาทีเท่านั้น

©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ