ストリーミングの罠

もっけ
もっけ

ワールドにパーツが多いと、ゲームに入った時に読み込みが遅くてグレーになったりすることがある。そんな時に、使うのがWorkSpaceにあるStreaming(ストリーミング)の有効化。
Streamingを有効化すると、参加したプレイヤーの周りからクライアント(スマホとかPC)が描画してくれるんだ。

うさぎ
うさぎ

プレイヤーに近い場所からモデルが描画されていくから、グレーになることはなくなる訳なんだね。

もっけ
もっけ

その通り!でも注意して欲しいことがある。
プレイヤーに近い場所からモデルが描画されるから、スクリプトがエラーになることがあるんだ!スクリプトはモデルがあることを前提に書いてたりするからね。

スクリプトでは、変数Modelを作るため、workspaceにあるLobbyフォルダのpartにアクセスしています。

-- サービス
local Players = game:GetService("Players")

-- 関数
local function onPlayerAdded(player)
	local Model = workspace.Lobby.part
end

Players.PlayerAdded:Connect(onPlayerAdded)

これをStreamingを有効にしてアクセスすると、モデルがまだ作られてない場合にエラーになります。

LobbyCam is not a valid member of Folder "Workspace.Lobby"  -  クライアント -   DialogManager:11
Stack Begin  -  Studio
Script 'Players.mokkeCH.PlayerGui.DialogManager', Line xx  -  Studio - DialogManager:xx
Stack End  -  Studio

解決策としては、WaitForChild()でパーツが出来るのを待つことです。階層ごとに待ちましょう。

-- サービス
local Players = game:GetService("Players")

-- 関数
local function onPlayerAdded(player)
	local Model = workspace:WaitForChild(Lobby)
        local Part = Model:WaitForChild(part)
end

Players.PlayerAdded:Connect(onPlayerAdded)

パーツができるのが遅いと、WaitForChild()がタイムアウトエラーになります・・。
ネットワーク ストリーミングの欠点は、クライアントが利用可能な特定のオブジェクトに依存できなくなることです。この意味を理解して、プロセスを導入しない限りは、Streamingを有効にしないでください。

コメント

タイトルとURLをコピーしました