إضافة دردشة صوتية

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

الدردشة الصوتية هي ميزة دردشة تعتمد على القرب تحاكي التواصل الواقعي من خلال ضبط حجم اللاعبين المتحدثين كلما اقتربوا أو ابتعدوا عن بعضهم البعض في الفضاء ثلاثي الأبعاد. من خلال السماح للاعبين بالتحدث مع بعضهم باستخدام ميكروفوناتهم، يمكنهم التواصل والتخطيط معًا في الوقت الفعلي عبر العالم لتحقيق أهداف لعبتك.

باستخدام ملف جزيرة الزنجبيل - دردشة صوتية .rbxl كمرجع، يوضح هذا الدليل كيفية دمج أشكال مختلفة من الدردشة الصوتية في طريقة لعبك، بما في ذلك الإرشادات حول:

  • فرز اللاعبين إلى فرق يمكنهم استخدام الدردشة الصوتية فقط مع زملائهم في الفريق.
  • السماح للاعبين بتفعيل ميكروفوناتهم مؤقتًا أثناء الضغط على زر معين على جهازهم.
  • تكوين فترات زمنية حيث تكون الدردشة الصوتية إما مفعلة أو معطلة.

بينما تستعرض الأقسام التالية جنبًا إلى جنب مع العينة، يمكنك تعديل كل نموذج كود لتلبية احتياجات متطلبات الدردشة الصوتية الخاصة بك بشكل أفضل.

تكوين الإعدادات

لكي تعمل دردشة الفريق، أو الدفع للدردشة، أو الدردشة المعتمدة على الوقت بشكل صحيح، يجب عليك تكوين إعدادات الدردشة الصوتية الخاصة بك لتمكين الدردشة الصوتية وإنشاء كائنات الصوت المناسبة اللازمة لالتقاط وإصدار الصوت داخل البيئة ثلاثية الأبعاد.

عندما ينضم اللاعبون إلى لعبتك، فإن إعداد الدردشة الصوتية الخاص بك الآن:

  • يسمح للاعبين المؤهلين للدردشة الصوتية باستخدام ميكروفوناتهم.
  • ينشئ ويضع كائن AudioDeviceInput تحت كل كائن Player مؤهل للدردشة الصوتية.
  • ينشئ ويضع كائن AudioEmitter تحت كل شخصية Player مؤهلة للدردشة الصوتية.
  • ينشئ ويضع كائن AudioListener تحت Workspace.CurrentCamera.

توضح الأقسام التالية ثلاث تكوينات فريدة للدردشة الصوتية باستخدام هذه الإعدادات. بينما تتبع مع ملف العينة جزيرة الزنجبيل - دردشة صوتية، يمكنك تمكين البرنامج النصي المعطل المقابل في نافذة Explorer لاختبار سلوكها. لضمان أن كل واحد يعمل بشكل صحيح، تأكد من تعطيل البرنامج النصي مرة أخرى قبل الانتقال إلى التكوين التالي.

البرامج النصية المعطلة في نافذة Explorer

إضافة دردشة الفريق

دردشة الفريق هي تكوين دردشة صوتية حيث يمكن للاعبين في نفس الفريق فقط التحدث أو سماع بعضهم البعض في اللعبة. يعد دمج دردشة الفريق في طريقة لعبك مفيدًا عندما تريد من اللاعبين التعاون والتخطيط معًا لحل المشكلات في اللعبة، مثل تنسيق المعلومات حول مواقع الفريق المعادي، والموارد، والمهام.

لإعادة إنشاء دردشة الصوت للفريق في ملف العينة جزيرة الزنجبيل - دردشة صوتية:

  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 مع إجراءات مثل:

    • فرز وتوازن اللاعبين بالتساوي في كل فريق.
    • تجميع اللاعبين تحت فريقهم في لوحة المتصدرين.
    • تلوين أسماء اللاعبين في الفضاء ثلاثي الأبعاد بلون فريقهم المقابل.

    باستخدام هذه الخدمة، ينشئ البرنامج النصي كائنين متميزين من Team بقيم خصائص Color مختلفة لتمثيل كل فريق: أحمر ساطع لفريق واحد و أزرق ساطع للفريق الآخر.

    ثم يعرف البرنامج النصي ثلاث وظائف حيث يحدث الجزء الأكبر من العمل لإعداد تكوين دردشة الصوت للفريق:

    • getUserIds - يعيد مصفوفة من معرفات المستخدم لجميع اللاعبين في الفريق.
    • getDevices - يعيد مصفوفة من كائنات AudioDeviceInput لجميع اللاعبين في الفريق. يمثل كل كائن AudioDeviceInput الميكروفون الفعلي للاعب في العالم الحقيقي.
    • updateTeam - يسترجع جميع معرفات المستخدم من getUserIds، ويتكرر عبر كائنات AudioDeviceInput من getDevices، ويضبط خاصية Enum.AccessModifierType الخاصة بهم إلى Allow بحيث يُسمح فقط بمعرفات المستخدم في كل فريق بسماع ميكروفونات زملائهم في الفريق، ثم يقوم بتحديث SetUserIdAccessList بمعرفات المستخدم من الفريق.

    يتحكم باقي البرنامج النصي في كيفية عمل هذه الوظائف ومراقبي الأحداث معًا:

    • عندما ينضم لاعب جديد إلى اللعبة، يتحقق البرنامج النصي مما إذا كان لدى اللاعب ميكروفون ويقوم بتحديث فريقه.
    • عندما يكتشف البرنامج النصي كائن AudioDeviceInput جديد، فإنه يستدعي updateTeam لفريقه الأحمر أو الأزرق المعني.
    • مع انضمام اللاعبين أو مغادرتهم اللعبة، يتصل البرنامج النصي بأحداث PlayerAdded و PlayerRemoved لتحديث إعدادات كل فريق.
  3. اختبر اللعبة مع بعض الأصدقاء للتحقق من أن زملاء الفريق من كل فريق يمكنهم سماع بعضهم البعض فقط من خلال الدردشة الصوتية.

إضافة الدفع للدردشة

الدفع للدردشة هو تكوين دردشة صوتية حيث يمكن للاعبين تفعيل ميكروفوناتهم فقط داخل اللعبة أثناء الضغط على زر معين على جهازهم. يعد دمج الدفع للدردشة في طريقة لعبك مفيدًا عندما تريد من اللاعبين الحصول على مزيد من الخصوصية والتحكم عندما يريدون أن يُسمعوا فوق اللاعبين الآخرين والضوضاء المحيطة.

لإعادة إنشاء الدفع للدردشة الصوتية في ملف العينة جزيرة الزنجبيل - دردشة صوتية:

  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.

إضافة دردشة معتمدة على الوقت

الدردشة المعتمدة على الوقت هي تكوين دردشة صوتية حيث يمكن للاعبين التحدث وسماع بعضهم البعض فقط خلال فترة زمنية محددة. يعد دمج الدردشة المعتمدة على الوقت في طريقة لعبك مفيدًا عندما تريد من اللاعبين التخطيط بعناية لكيفية التواصل مع بعضهم البعض خلال مراحل معينة، مثل خلال المناقشات المعتمدة على الجولات أو بعد مشاهد القطع.

لإعادة إنشاء الدردشة الصوتية المعتمدة على الوقت في ملف العينة جزيرة الزنجبيل - دردشة صوتية:

  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 وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.