友達を体験内で見つけるのは難しい場合があります。FriendsLocator 開発者モジュールを使用すると、プレイヤーは体験内で簡単に友達を見つけてテレポートできるようになります。
モジュールの使用
インストール
体験内でFriendsLocatorモジュールを使用するには:
スタジオのウィンドウメニューまたはホームタブツールバーから、ツールボックスを開いてクリエイターストアタブを選択します。

モデルの並べ替えが選択されていることを確認し、カテゴリのすべてを見るボタンをクリックします。

パッケージタイルを見つけてクリックします。
フレンズロケーターモジュールを見つけてクリックするか、3Dビューにドラッグ&ドロップします。

エクスプローラーウィンドウで、FriendsLocatorモデル全体をReplicatedStorageに移動します。体験を実行すると、モジュールが動作を開始します。
スタジオでのテスト
スタジオでモジュールをテストするには、FriendsLocatorモジュールをマルチクライアントシミュレーションで実行する必要があります。なぜなら、ソロプレイテストでは友達が存在しないからです。
StarterPlayerScripts内に新しいLocalScriptを作成し、ConfigureFriendsLocatorに名前を変更します。

新しいConfigureFriendsLocatorスクリプトに次のコードを貼り付けます。configure関数内のshowAllPlayers設定は、スタジオでテスト中にすべてのユーザーのロケーターが表示されるようにしますが、公開された場所では表示されません。
LocalScript - ConfigureFriendsLocatorlocal RunService = game:GetService("RunService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local FriendsLocator = require(ReplicatedStorage.FriendsLocator)FriendsLocator.configure({showAllPlayers = RunService:IsStudio(), -- スタジオでのデバッグを許可})スタジオのメザニンから、2クライアントでのマルチクライアントシミュレーションを開始します。スタジオが3つの新しいインスタンスを開きます。1つはシミュレーションされたサーバー、2つはシミュレーションされたクライアントです。

どちらかのクライアントスタジオインスタンスに入り、他のキャラクターから100スタッドの距離を移動すると、その頭上にロケーターアイコンが表示されるのが見えるはずです。

イベントへの接続
FriendsLocatorモジュールは、ロケーターアイコンとユーザーが対話する際にカスタム動作を導入できるようにイベントを公開しています。
スタジオでのテストで説明した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)マルチクライアントテストを実施し、他のキャラクターのロケーターアイコンをクリックします。あなたのキャラクターがその位置にテレポートしないことに気づき、イベントがトリガーされてアイコンのクリックをカスタム処理できることが確認できます。
カスタムロケーターUI
デフォルトスタイルがあなたの体験に合わない場合は、デフォルトのアバターポートレートUIを独自のUIに置き換えることができます。

デフォルトUIを置き換えるには:
StarterGuiコンテナ内に新しいScreenGuiインスタンスを作成します。

新しいScreenGuiの子としてFriendLocatorという名前のFrameインスタンスを作成し、ImageLabels、TextLabelsのような要素を追加してカスタムUIを設計します。

完了したら、モジュールが必要なときにカスタムロケーターUIを表示しないように、親のScreenGuiを無効にします。

(オプション) 友だちのアバターポートレートとDisplayNameをカスタムUIのどこかに表示させたい場合は、次のインスタンスをFriendLocatorフレーム内に置くことができます。
- 名前PortraitのImageLabel。
- 名前DisplayNameのTextLabel。

モジュールはこれらのアイテムを探して、友だちのアバターポートレートおよび/または表示名をそれぞれ表示します。
APIリファレンス
関数
configure
configure(config: table)
configテーブル内の以下のキー/値を通してデフォルトの設定オプションを上書きします。
| キー | 説明 | デフォルト |
|---|---|---|
| alwaysOnTop | trueの場合、ロケーターアイコンをすべての上に表示し、3Dワールドオブジェクトによってブロックされないようにします。 | 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 | ロケーターアイコンに関連するプレイヤーの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)