在遊戲中找到朋友可能會很具挑戰性。 FriendsLocator 開發者模組 讓玩家可以輕鬆地在遊戲中找到並傳送到他們的朋友。
模組使用
安裝
要在一個經驗中使用 FriendsLocator 模組:
從 Studio 的 視窗 菜單或 主頁 標籤工具列,開啟 工具箱 並選擇 創作者商店 標籤。

確保選擇了 模型 排序,然後點擊 查看全部 按鈕以查看 類別。

找到並點擊 套件 瓦片。
找到 朋友定位器 模組並點擊,或將其拖放到 3D 視圖中。

在 探索器 視窗中,將整個 FriendsLocator 模型移到 ReplicatedStorage 中。運行經驗時,模組將開始運作。
在 Studio 中測試
要在 Studio 中測試模組,FriendsLocator 模組必須在多客戶端模擬中運行,因為單人遊玩測試中不會有朋友。
在 StarterPlayerScripts 中,創建一個新的 LocalScript,並將其重命名為 ConfigureFriendsLocator。

將以下代碼粘貼到新的 ConfigureFriendsLocator 腳本中。 configure 函數中的 showAllPlayers 設定可確保在 Studio 中測試時顯示所有用戶的定位器,但在發佈的地點中不會如此。
LocalScript - ConfigureFriendsLocatorlocal RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage.FriendsLocator)FriendsLocator.configure({showAllPlayers = RunService:IsStudio(), -- 允許在 Studio 中進行調試})從 Studio 的中夾層,開始一個 多客戶端模擬,並使用 2 個客戶端。三個新的 Studio 實例將被打開;一個模擬的伺服器和兩個模擬的客戶端。

進入任一 客戶端 Studio 實例,與另一個角色的距離移動 100 studs,您應該會看到出現在角色頭頂上的 定位器圖示。

連接到事件
FriendsLocator 模組公開了 事件,這樣您就可以在用戶與定位器圖示互動時引入自定義行為。
確保您已創建在 Studio 中測試中概述的 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(), -- 允許在 Studio 中進行調試teleportToFriend = false, -- 防止在圖示點擊/點擊時傳送})FriendsLocator.clicked:Connect(function(player, playerCFrame)print("您點擊了定位器圖示,對應的玩家是", player.DisplayName)end)進行一個 多客戶端測試,並單擊另一個角色的定位器圖示。注意您的角色不會傳送到該位置,事件觸發以便自定義處理圖示點擊。
自定義定位器 UI
如果默認樣式不符合您的經驗,您可以用自己的 UI 替換默認的虛擬形象肖像 UI。

要替換默認的 UI:
在 StarterGui 容器內創建一個新的 ScreenGui 實例。

創建一個名為 FriendLocator 的 Frame 實例作為新 ScreenGui 的子項,然後添加 ImageLabels、TextLabels 等元素來設計您的自定義 UI。

完成後,停用 父 ScreenGui,以便該模組在需要之前不顯示自定義定位器 UI。

(可選) 如果您希望朋友的虛擬形象肖像和 DisplayName 在自定義 UI 中某處顯示,您可以將以下實例放置在 FriendLocator 框架中。
- 名稱為 Portrait 的 ImageLabel。
- 名稱為 DisplayName 的 TextLabel。

該模組會尋找這些項目並分別顯示朋友的虛擬形象肖像和/或顯示名稱。
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 | 定位器圖示所屬玩家的 Humanoid.RootPart 的 CFrame。 |
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 | 定位器圖示所屬玩家的 Humanoid.RootPart 的 CFrame。 |
| isVisible: boolean | 定位器圖示目前在本地玩家的畫面上是否可見。請注意,如果 alwaysOnTop 為 false 且定位器在 3D 世界中的物體後面渲染,這仍然會是 true。 |
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local FriendsLocator = require(ReplicatedStorage.FriendsLocator)
FriendsLocator.visibilityChanged:Connect(function(player, playerCFrame, isVisible)
print("定位器圖示對於", player.DisplayName, "的可見性:", isVisible)
end)