朋友定位器

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

可能很难在体验中找到朋友。 朋友定位器 开发者模块 让玩家轻松找到并传送到他们在一个场景内的朋友。

模块使用

安装

要在体验中使用 朋友定位器 模块:

  1. 视图选项卡打开工具箱并选择 创建者商店 选项卡。

    Toolbox toggle button in Studio
  2. 确保 模型排序 已选择,然后单击 查看所有 按钮为 类别

  3. 找到并单击 开发者模块 地瓦片。

  4. 找到 朋友定位器 模块,然后单击它或拖放到 3D 视查看中。

  5. Explorer 窗口中,将整个 FriendsLocator 模型移到 ServerScriptService 中。 在运行体验时,模块将分配到各个服务并开始运行。

在工作室测试

要在 Studio 中测试模块,必须在多客户端模拟中运行 FriendsLocator 模块,因为在单独的游戏测试中不会有任何朋友。

  1. StarterPlayerScripts 中,创建一个新的 LocalScript 并将其重命名为 ConfigureFriendsLocator

  2. 将以下代码粘贴到新的 配置朋友定位器 脚本中。 showAllPlayers 设置在 配置 功能中确保在 Studio 中测试时显示所有用户,但不会在发布位场景。

    本地脚本 - 配置朋友定位器

    local RunService = game:GetService("RunService")
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local FriendsLocator = require(ReplicatedStorage:WaitForChild("FriendsLocator"))
    FriendsLocator.configure({
    showAllPlayers = RunService:IsStudio(), -- 允许在工作室中调试
    })
  3. 测试选项卡选择 客户端和服务器 的组合,然后单击 开始 按钮。三个新的 Studio 实例将打开;一个模拟服务器和两个模拟客户端。

  4. 进入任意 客户端 Studio 实例,移动 100 格外的距离从另一个角色,你应该看到一个 位置标志 出现在它的头上。

连接到事件

朋友定位器 模块显示 事件,以便您可以在用户与地图标志交互时介绍自定义行为。

  1. 请确保您创建了 ConfigureFriendsLocator 脚本,详细描述在 在 Studio 测试 中。

  2. 将 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)
  3. 执行多客户端测试并单击另一个角色的位置标志。注意您的角色不会传送到该位置,事件触发允许自定义处理图标点击。

自定义定位器用户界面

如果默认风格不适合您的体验,您可以将默认虚拟形象肖像 UI 替换为您自己的 UI。

要替换默认 UI:

  1. 创建一个新的 ScreenGui 实例,其中 StarterGui 容器内。

  2. 创建一个 Frame 实例,名为 FriendLocator 作为新的 ScreenGui 的子,然后添加元素如 2> Class.ImageLabel|ImageTags2> 、 5> Class.TextLabel|TextTags5> 来设计您自定义 UI。

  3. 当完成时, 禁用 父级ScreenGui,以便在需要时模块不会显示自定义定位器 UI。

  4. (可选) 如果您想要朋好友的头像肖像和 DisplayName 出现在自定义 UI 中的某个地方,您可以将以下实例放置在 朋友定位器 框架内。

    • 一个名为 ImageLabel 的名称为 头像 的。
    • Class.TextLabel 的名称 显示名称

    模块将寻找这些项目,并分别显示朋好友的头像和/或显示名称。

API 引用

函数

配置

配置(配: table )

通过 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:CFrameCFrame 的玩家的 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 中。

参数
玩家: PlayerPlayer 对象,该定位图标属于。
playerCFrame:CFrameCFrame 的玩家的 Humanoid.RootPart 里的定位器图标。
可见: boolean是否在本地玩家屏幕上显示地图标。注意,这仍然会是 true 如果 alwaysOnTopfalse 和对象在 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)