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

تأكد من تحديد فرز النماذج، ثم انقر فوق زر عرض الكل ل الفئات.

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

في نافذة مستكشف، انقل النموذج الكامل محدد الأصدقاء إلى ReplicatedStorage. عند تشغيل التجربة، ستبدأ الوحدة في العمل.
الاختبار في الاستوديو
لاختبار الوحدة في الاستوديو، يجب تشغيل وحدة محدد الأصدقاء في محاكاة متعددة العملاء، حيث لن يكون هناك أصدقاء في اختبار اللعب الفردي.
في StarterPlayerScripts، أنشئ LocalScript جديدة وأعد تسميتها إلى ConfigureFriendsLocator.

ألصق الكود التالي في البرنامج النصي الجديد ConfigureFriendsLocator. تضمن الإعداد showAllPlayers داخل الدالة configure عرض محددات المواقع لجميع المستخدمين أثناء الاختبار في الاستوديو، ولكن ليس في مكان منشور.
LocalScript - ConfigureFriendsLocatorlocal RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage.FriendsLocator)FriendsLocator.configure({showAllPlayers = RunService:IsStudio(), -- يسمح بتصحيح الأخطاء في الاستوديو})من الميزان في الاستوديو، ابدأ محاكاة متعددة العملاء مع عميلين. ستفتح ثلاث نسخ جديدة من الاستوديو؛ خادم محاكي وعميلين محاكين.

انتقل إلى إحدى نسخ استوديو العميل، وحرك مسافة 100 وحدة عن الشخصية الأخرى، ويتعين عليك رؤية أيقونة محدد تظهر فوق رأسها.

الاتصال بالأحداث
تتعرض وحدة محدد الأصدقاء الأحداث بحيث يمكنك تقديم سلوكيات مخصصة عندما يتفاعل المستخدمون مع أيقونة محدد.
تأكد من أنك قد أنشأت البرنامج النصي ConfigureFriendsLocator الموضح في الاختبار في الاستوديو.
أضف الأسطر 8 و 11-13 إلى البرنامج النصي:
LocalScript - ConfigureFriendsLocatorlocal RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage.FriendsLocator)FriendsLocator.configure({showAllPlayers = RunService:IsStudio(), -- يسمح بتصحيح الأخطاء في الاستوديوteleportToFriend = false, -- يمنع النقل عند النقر/اللمس على الأيقونة})FriendsLocator.clicked:Connect(function(player, playerCFrame)print("لقد نقرت على أيقونة محدد الموقع لـ", player.DisplayName)end)قم بإجراء اختبار متعدد العملاء وانقر على أيقونة محدد شخصية أخرى. لاحظ أن شخصيتك لا تنتقل إلى ذلك الموقع، ويتم تفعيل الحدث للسماح بالتعامل المخصص مع نقرات الأيقونة.
واجهة المستخدم لمحدد المواقع المخصصة
إذا كانت النمط الافتراضي لا يتناسب مع تجربتك، يمكنك استبدال واجهة المستخدم الخاصة بصورة الأفاتار الافتراضية بواجهة المستخدم الخاصة بك.

لاستبدال واجهة المستخدم الافتراضية:
أنشئ مثيل ScreenGui جديدة داخل حاوية StarterGui.

أنشئ مثيل Frame باسم FriendLocator كطفل لـ ScreenGui الجديدة، ثم أضف عناصر مثل ImageLabels، TextLabels لتصميم واجهتك المخصصة.

عند الانتهاء، قم بتعطيل ScreenGui الوالد بحيث لا تظهر واجهة مستخدم محدد المواقع المخصصة حتى الحاجة.

(اختياري) إذا كنت تريد عرض صورة أفاتار صديق و DisplayName في مكان ما في واجهة المستخدم المخصصة، يمكنك وضع المثيلات التالية داخل إطار FriendLocator.
- ImageLabel بالاسم Portrait.
- TextLabel بالاسم DisplayName.

ستبحث الوحدة عن هذه العناصر وتعرض صورة أفاتار الصديق و/أو اسم العرض الخاص بهما تباعًا.
مرجع واجهة برمجة التطبيقات
الدوال
configure
configure(config: table)
تجاوز خيارات التكوين الافتراضية من خلال المفاتيح/القيم التالية في جدول config.
| المفتاح | الوصف | الافتراضي |
|---|---|---|
| alwaysOnTop | إذا كان true، سيتم عرض أيقونات المحددات في أعلى كل شيء، مما يمنع حجبها بواسطة كائنات العالم ثلاثي الأبعاد. | true |
| showAllPlayers | إذا كان true، سيتم عرض المواقع لجميع اللاعبين، وليس فقط الأصدقاء؛ يمكن أن يساعد ذلك في التحقق من وظيفة الوحدة في الاستوديو. | false |
| teleportToFriend | ينقل شخصية اللاعب إلى موقع الصديق عندما يتم النقر أو اللمس على أيقونة محددها. | true |
| thresholdDistance | حد مسافة الكاميرا الذي تظهر عنده أيقونات المحددات؛ لن تظهر أيقونات الأصدقاء الأقرب من هذه المسافة. | 100 |
| maxLocators | الحد الأقصى لعدد أيقونات المحددات المعروضة في أي وقت. | 10 |
LocalScript - ConfigureFriendsLocatorlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage.FriendsLocator)FriendsLocator.configure({alwaysOnTop = true,showAllPlayers = false,teleportToFriend = true,thresholdDistance = 100,maxLocators = 10})
الأحداث
clicked
يتم إطلاقه عندما يتم النقر/تفعيل أيقونة محدد الموقع بواسطة اللاعب المحلي. يمكن الاتصال بهذا الحدث فقط في LocalScript.
| المعلمات | |
|---|---|
| player: Player | اللاعب الذي تنتمي إليه أيقونة المحدد. |
| playerCFrame: CFrame | CFrame من Humanoid.RootPart للاعب الذي تنتمي إليه أيقونة المحدد. |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local FriendsLocator = require(ReplicatedStorage.FriendsLocator)
local localPlayer = Players.LocalPlayer
FriendsLocator.clicked:Connect(function(player, playerCFrame)
-- طلب البث حول موقع الهدف
if Workspace.StreamingEnabled then
local success, errorMessage = pcall(function()
localPlayer:RequestStreamAroundAsync(playerCFrame.Position)
end)
if not success then
print(errorMessage)
end
end
print("لقد نقرت على أيقونة محدد الموقع لـ", player.DisplayName, "في الموقع", playerCFrame.Position)
end)
visibilityChanged
يتم إطلاقه عندما يتم عرض أو إخفاء أيقونة محدد الموقع على شاشة اللاعب المحلي. يمكن الاتصال بهذا الحدث فقط في LocalScript.
| المعلمات | |
|---|---|
| player: Player | كائن Player الذي تنتمي إليه أيقونة المحدد. |
| playerCFrame: CFrame | CFrame من Humanoid.RootPart للاعب الذي تنتمي إليه أيقونة المحدد. |
| isVisible: boolean | ما إذا كانت أيقونة المحدد مرئية حاليًا على شاشة اللاعب المحلي. لاحظ أن هذا سيظل true إذا كانت alwaysOnTop هي false وكانت أيقونة محدد المواقع تظهر وراء كائن في العالم ثلاثي الأبعاد. |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local FriendsLocator = require(ReplicatedStorage.FriendsLocator)
FriendsLocator.visibilityChanged:Connect(function(player, playerCFrame, isVisible)
print("رؤية أيقونة المحدد لـ", player.DisplayName, ":", isVisible)
end)