การหาผู้เล่นเพื่อนไปในประสบการณ์อาจจะเป็นเรื่องท้าทาย โมดูล FriendsLocator สำหรับนักพัฒนา ช่วยให้ผู้เล่นหาง่ายและทีละเพื่อนของเขาภายในสถานที่
การใช้งานโมดูล
การติดตั้ง
ในการใช้งานโมดูล FriendsLocator ในประสบการณ์:
จากเมนู Window ของ Studio หรือแถบเครื่องมือ Home ให้เปิด Toolbox และเลือกแท็บ Creator Store

ให้แน่ใจว่าการจัดเรียง Models ถูกเลือก จากนั้นคลิกปุ่ม See All สำหรับ Categories

ค้นหาและคลิกที่ไอคอน Packages
ค้นหาโมดูล Friends Locator และคลิกที่มัน หรือลากและวางลงในมุมมอง 3D

ในหน้าต่าง Explorer ให้ย้ายโมเดล FriendsLocator ทั้งหมดไปยัง ReplicatedStorage เมื่อทำการรันประสบการณ์ โมดูลจะเริ่มทำงาน
ทดสอบใน Studio
ในการทดสอบโมดูลใน Studio โมดูล FriendsLocator ต้องทำงานในสภาพแวดล้อมที่มีหลายไคลเอนต์ (multi-client simulation) เนื่องจากไม่มีเพื่อนในโหมดทดสอบเดี่ยว
ใน StarterPlayerScripts สร้าง LocalScript ใหม่และเปลี่ยนชื่อเป็น ConfigureFriendsLocator

วางโค้ดดังต่อไปนี้ลงในสคริปต์ ConfigureFriendsLocator ใหม่ ตัวตั้งค่า showAllPlayers ในฟังก์ชัน configure จะทำให้ตัวติดตามปรากฏสำหรับผู้ใช้ทั้งหมดในขณะที่ทดสอบใน Studio แต่ไม่ในสถานที่ที่เผยแพร่
LocalScript - ConfigureFriendsLocatorlocal RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage.FriendsLocator)FriendsLocator.configure({showAllPlayers = RunService:IsStudio(), -- อนุญาตสำหรับการดีบักใน Studio})จาก mezzanine ของ Studio เริ่มการ จำลองไคลเอนต์หลายตัว กับ 2 ไคลเอนต์ จะมีการเปิด Studio ใหม่ 3 ตัว; หนึ่งเซิร์ฟเวอร์จำลองและ 2 ไคลเอนต์จำลอง

เข้าสู่หนึ่งในตัวอย่าง ไคลเอนต์ ของ Studio เดินออกห่างจากตัวละครอีกตัวหนึ่ง 100 studs และคุณจะเห็น ไอคอนตัวติดตาม ปรากฏขึ้นเหนือหัวของเขา

เชื่อมต่อกับเหตุการณ์
โมดูล FriendsLocator นำเสนอ เหตุการณ์ เพื่อให้คุณสามารถแนะนำพฤติกรรมที่กำหนดเองเมื่อผู้ใช้มีปฏิสัมพันธ์กับไอคอนตัวติดตาม
ตรวจสอบให้แน่ใจว่าคุณได้สร้างสคริปต์ ConfigureFriendsLocator ตามที่ระบุใน การทดสอบใน Studio
เพิ่มบรรทัด 8 และ 11-13 ลงในสคริปต์:
LocalScript - ConfigureFriendsLocatorlocal RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage.FriendsLocator)FriendsLocator.configure({showAllPlayers = RunService:IsStudio(), -- อนุญาตสำหรับการดีบักใน StudioteleportToFriend = false, -- ป้องกันการทีเมื่อคลิก/แตะที่ไอคอน})FriendsLocator.clicked:Connect(function(player, playerCFrame)print("คุณคลิกที่ไอคอนตัวติดตามของ", player.DisplayName)end)ดำเนินการ ทดสอบหลายไคลเอนต์ และคลิกที่ไอคอนตัวติดตามของตัวละครอื่น สังเกตว่าตัวละครของคุณจะไม่ถูกส่งไปยังตำแหน่งนั้น และเหตุการณ์ถูกเรียกเพื่ออนุญาตให้มีการจัดการที่กำหนดเองกับการคลิกที่ไอคอน
UI ตัวติดตามที่กำหนดเอง
หากสไตล์เริ่มต้นไม่เข้ากับประสบการณ์ของคุณ คุณสามารถเปลี่ยน UI ของภาพอวตารเริ่มต้นด้วย UI ของคุณเอง

ในการเปลี่ยน UI เริ่มต้น:
สร้างอินสแตนซ์ใหม่ของ ScreenGui ภายใน StarterGui

สร้างอินสแตนซ์ Frame ที่ชื่อ FriendLocator เป็นลูกของ ScreenGui ใหม่ จากนั้น เพิ่มองค์ประกอบเช่น ImageLabels, TextLabels เพื่อออกแบบ UI ที่กำหนดเองของคุณ

เมื่อเสร็จแล้วให้ ปิดใช้งาน ScreenGui แม่เพื่อที่ว่าโมดูลจะไม่แสดง UI ตัวติดตามที่กำหนดเองจนกว่าจะต้องการ

(ไม่บังคับ) หากคุณต้องการให้ภาพอวตารของเพื่อนและ DisplayName แสดงที่ใดที่หนึ่งใน UI ที่กำหนดเอง คุณสามารถวางอินสแตนซ์ดังต่อไปนี้ภายในกรอบ FriendLocator
- ImageLabel ที่ชื่อ Portrait
- TextLabel ที่ชื่อ DisplayName

โมดูลจะมองหาสิ่งเหล่านี้และแสดงภาพอวตารของเพื่อนและ/หรือชื่อแสดงผลตามลำดับ
อ้างอิง API
ฟังก์ชัน
configure
configure(config: table)
แทนที่ตัวเลือกการกำหนดค่าดีฟอลต์ผ่านกุญแจ/ค่าต่อไปนี้ในตาราง config
| กุญแจ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
| alwaysOnTop | หากเป็น true, จะแสดงไอคอนตัวติดตามเหนือทุกสิ่ง เพื่อป้องกันไม่ให้ถูกบล็อกโดยวัตถุในโลก 3D | true |
| showAllPlayers | หากเป็น true, จะแสดงตำแหน่งสำหรับผู้เล่นทั้งหมด ไม่ใช่แค่เพื่อนเท่านั้น; สิ่งนี้สามารถช่วยในการตรวจสอบฟังก์ชันการทำงานของโมดูลใน Studio | 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 และตัวติดตามอยู่เบื้องหลังวัตถุในโลก 3D |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local FriendsLocator = require(ReplicatedStorage.FriendsLocator)
FriendsLocator.visibilityChanged:Connect(function(player, playerCFrame, isVisible)
print("การมองเห็นของไอคอนตัวติดตามสำหรับ", player.DisplayName, ":", isVisible)
end)