คู่มือการใช้งานระดับกลาง

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

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

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

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

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

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

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

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

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

  • อนุญาตให้ผู้เล่นที่มีสิทธิ์ใช้ไมโครโฟน
  • สร้างและจัดต้นไม้ 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 จะจัดการการทำงานต่างๆ เช่น:

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

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

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

    • getUserIds - คืนค่าอาร์เรย์ของ userIDs สำหรับผู้เล่นทั้งหมดในทีม
    • getDevices - คืนค่าอาร์เรย์ของออบเจ็กต์ AudioDeviceInput สำหรับผู้เล่นทั้งหมดในทีม ออบเจ็กต์ Class.AudioDeviceInput แต่ละอันจะแทนไมโครโฟนทางกายภาพของผู้เล่นในโลกจริง
    • updateTeam - ดึง userIDs ทั้งหมดจาก getUserIds ทำการวนซ้ำออบเจ็กต์ AudioDeviceInput จาก getDevices ตั้งค่า property ของ 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 หรือไมโครโฟนทางกายภาพบนอุปกรณ์ของพวกเขาหรือไม่
    • หากพวกเขามี ฟังก์ชันจะตั้งค่า property ของออบเจ็กต์ AudioDeviceInput เป็นค่าของ muteAll ตัวอย่างเช่น หาก muteAll เป็น true ไมโครโฟนของผู้เล่นจะถูกปิดเสียง และถ้า muteAll เป็น false ไมโครโฟนของผู้เล่นจะเปิดใช้งาน

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

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

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