ReplicatedFirst はRobloxのサービスで、一部のスクリプトやアセットをクライアント(プレーヤーのデバイス)に最初にロードするために使われます。このサービスの主な用途は、ゲームの初期ロード画面やロード中のアニメーションなど、ゲームが完全にロードされる前に表示したいコンテンツを管理することです。
通常、Robloxゲームはクライアントとサーバーの間でアセットやスクリプトを自動的に複製します。しかし、この自動複製プロセスは順序が保証されないため、一部のコンテンツが他のコンテンツよりも早くロードされることを保証するためには、ReplicatedFirstサービスを使用する必要があります。
ReplicatedFirst内のスクリプトは、他の全てのスクリプトよりも先に実行されます。これは特にローカルスクリプトに重要で、ReplicatedFirst 内のローカルスクリプトは、StarterGui や StarterPlayerScripts 内のスクリプトよりも先に実行されます。

クライアントの処理になりますので ReplicatedFirst は、必然的に LocalScript になります。ゲームに入った際に、ReplicatedStorage の Assets フォルダに入れた各種アセットをロードする様子を表示するプログラムを作成してみました。

  1. ReplicatedFirst にLocalScriptを追加し、下記のプログラムを入力します。
  2. さらにそのスクリプトの下に ScreenGui し、名前をStartScreenGuiに変更します。
    (一度 StarterGui の中で作成し、完成後にLocalScriptの下に移動させるのがベスト)
  3. ScreenGui の中に Frame を、さらにその下に TextLabel を入れます。
  4. ReplicatedStorage に Assets というフォルダを作成し、各種アセットを入れておきます。
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ContentProvider = game:GetService("ContentProvider")

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

local screenGui = script.StartScreenGui:Clone()

-- デフォルトのローディング画面を削除
ReplicatedFirst:RemoveDefaultLoadingScreen()

if not game:IsLoaded() then
    game.Loaded:Wait()
end

-- ReplicatedStorage の Assets フォルダにロードするアセットをいれておく
local assets = ReplicatedStorage.Assets:GetChildren()

screenGui.Parent = playerGui

for i, asset in ipairs(assets) do
    ContentProvider:PreloadAsync({ asset }) 
    screenGui.Frame.TextLabel.Text = "Loading:"..i.."/"..#assets
    wait()
end

screenGui:Destroy()

このプログラムでは、GUIを閉じるボタンが設置されていません。ローディング画面を飛ばしたいこともあると思いますので、キャンセルできるボタン等を設置した方がいいでしょう。

By schilverberch

ROBLOXでゲームを作ろう! 一緒にプログラミングを学びましょう。

コメントを残す