可能很难在体验中找到朋友。 朋友定位器 开发者模块 让玩家轻松找到并传送到他们在一个场景内的朋友。
模块使用
安装
要在体验中使用 朋友定位器 模块:
确保 模型排序 已选择,然后单击 查看所有 按钮为 类别 。
找到并单击 开发者模块 地瓦片。
找到 朋友定位器 模块,然后单击它或拖放到 3D 视查看中。
在 Explorer 窗口中,将整个 FriendsLocator 模型移到 ServerScriptService 中。 在运行体验时,模块将分配到各个服务并开始运行。
在工作室测试
要在 Studio 中测试模块,必须在多客户端模拟中运行 FriendsLocator 模块,因为在单独的游戏测试中不会有任何朋友。
在 StarterPlayerScripts 中,创建一个新的 LocalScript 并将其重命名为 ConfigureFriendsLocator 。
将以下代码粘贴到新的 配置朋友定位器 脚本中。 showAllPlayers 设置在 配置 功能中确保在 Studio 中测试时显示所有用户,但不会在发布位场景。
本地脚本 - 配置朋友定位器local RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage:WaitForChild("FriendsLocator"))FriendsLocator.configure({showAllPlayers = RunService:IsStudio(), -- 允许在工作室中调试})从测试选项卡选择 客户端和服务器 的组合,然后单击 开始 按钮。三个新的 Studio 实例将打开;一个模拟服务器和两个模拟客户端。
进入任意 客户端 Studio 实例,移动 100 格外的距离从另一个角色,你应该看到一个 位置标志 出现在它的头上。
连接到事件
朋友定位器 模块显示 事件,以便您可以在用户与地图标志交互时介绍自定义行为。
请确保您创建了 ConfigureFriendsLocator 脚本,详细描述在 在 Studio 测试 中。
将 8 和 11-13 行添加到脚本:
本地脚本 - 配置朋友定位器local RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage:WaitForChild("FriendsLocator"))FriendsLocator.configure({showAllPlayers = RunService:IsStudio(), -- 允许在工作室中调试teleportToFriend = false, -- 防止图标点击/点击时传送})FriendsLocator.clicked:Connect(function(player, playerCFrame)print("You clicked on locator icon for", player.DisplayName)end)执行多客户端测试并单击另一个角色的位置标志。注意您的角色不会传送到该位置,事件触发允许自定义处理图标点击。
自定义定位器用户界面
如果默认风格不适合您的体验,您可以将默认虚拟形象肖像 UI 替换为您自己的 UI。
要替换默认 UI:
创建一个新的 ScreenGui 实例,其中 StarterGui 容器内。
当完成时, 禁用 父级ScreenGui,以便在需要时模块不会显示自定义定位器 UI。
(可选) 如果您想要朋好友的头像肖像和 DisplayName 出现在自定义 UI 中的某个地方,您可以将以下实例放置在 朋友定位器 框架内。
- 一个名为 ImageLabel 的名称为 头像 的。
- Class.TextLabel 的名称 显示名称 。
模块将寻找这些项目,并分别显示朋好友的头像和/或显示名称。
API 引用
函数
配置
通过 config 表中的以下键/值来覆盖默认配置选项。
钥匙 | 描述 | 默认 |
---|---|---|
alwaysOnTop | 如果 true ,显示地点图标在所有东西的顶部,防止 3D 世界对象阻止它们。 | 真的 |
showAllPlayers | 如果 true ,显示所有玩家的位置,不仅仅是朋友;这可以帮助验证模块在 Studio 的功能。 | 否 |
teleportToFriend | 当玩家角色传送到朋好友的位置时,如果其位置图标已点击或点击,朋友就会收到通知。 | 真的 |
thresholdDistance | 友好距离在此处显示距离的相位标志,在此距离之内的朋友不会显示图标。 | 100 |
maxLocators | 显示任何时间的最大地点图标数。 | 10 |
本地脚本 - 配置朋友定位器
local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage:WaitForChild("FriendsLocator"))FriendsLocator.configure({alwaysOnTop = true,showAllPlayers = false,teleportToFriend = true,thresholdDistance = 100,maxLocators = 10})
事件
点击
当本地玩家单击/激活地图标志时,它将发生。 此事件只能在 LocalScript 中连接。
参数 | |
---|---|
玩家: Player | 指针图标指向的位置。 |
playerCFrame:CFrame | CFrame 的玩家的 Humanoid.RootPart 里的定位器图标。 |
本地脚本
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local FriendsLocator = require(ReplicatedStorage:WaitForChild("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("You clicked on locator icon for", player.DisplayName, "at position", playerCFrame.Position)
end)
隐藏已更改
当本地玩家屏幕上显示/隐藏地点图标时,该事件只能连接在 LocalScript 中。
参数 | |
---|---|
玩家: Player | Player 对象,该定位图标属于。 |
playerCFrame:CFrame | CFrame 的玩家的 Humanoid.RootPart 里的定位器图标。 |
可见: boolean | 是否在本地玩家屏幕上显示地图标。注意,这仍然会是 true 如果 alwaysOnTop 是 false 和对象在 3D 世界中的渲染器后。 |
本地脚本
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local FriendsLocator = require(ReplicatedStorage:WaitForChild("FriendsLocator"))
FriendsLocator.visibilityChanged:Connect(function(player, playerCFrame, isVisible)
print("Visibility of locator icon for", player.DisplayName, ":", isVisible)
end)