ここまでで、Roblox Studioのスクリプトについて基本的なことを学びました。
今回は、スクリプトを使ったゲーム制作で非常に重要になるReplicatedStorageについて解説します。
ReplicatedStorageは、簡単に言うとサーバーとプレイヤー側の両方からアクセスできる場所です。
そのため、ゲーム内で共有したいものや、サーバーとプレイヤー側で通信するためのRemoteEventなどを置く場所としてよく使われます。
ReplicatedStorageとは?
ReplicatedStorageは、Roblox Studioに最初から用意されているサービスの1つです。
Explorerを見ると、
ReplicatedStorage
という項目があります。
ここには、ゲーム内で共有して使用するさまざまなオブジェクトを入れられます。
例えば、
- RemoteEvent
- RemoteFunction
- ModuleScript
- Folder
- Model
- その他共有したいオブジェクト
などを入れることができます。
サーバーとプレイヤー側の両方からアクセスできる
ReplicatedStorageの大きな特徴は、サーバー側とプレイヤー側の両方からアクセスできることです。
Robloxのゲームでは、大きく分けて、
サーバー
と
プレイヤー側(クライアント)
があります。
先ほどの記事で紹介したように、Scriptは主にサーバー側、LocalScriptは主にプレイヤー側で処理を行います。
ReplicatedStorageは、その両方から利用できる共有スペースのようなものです。
例えば、
ReplicatedStorage
├─ RemoteEvent
├─ RemoteFunction
└─ Modules
のようにして、両方から使いたいものをまとめておくことができます。
ReplicatedStorageを使ってみよう
ExplorerでReplicatedStorageを選択して、+ボタンからFolderなどを追加してみましょう。
例えば、
ReplicatedStorage
└─ Assets
というFolderを作ります。
この中にサーバーとプレイヤー側の両方で使用するModelなどを入れておけば、必要なときにスクリプトから取得できます。
スクリプトでは、
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local assets = ReplicatedStorage:WaitForChild("Assets")
のように取得できます。
game:GetService()を使うことで、ReplicatedStorageを取得できます。
RemoteEventを使おう
ReplicatedStorageで特に重要なのが、RemoteEventです。
RemoteEventは、サーバーとプレイヤー側の間で通信するための機能です。
例えば、
プレイヤーがボタンを押す
↓
プレイヤー側からサーバーに知らせる
↓
サーバーがゲーム内の処理を行う
といった仕組みを作れます。
まずReplicatedStorageにRemoteEventを追加します。
ReplicatedStorage
└─ RemoteEvent
そしてLocalScriptから、
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")
remoteEvent:FireServer()
とすると、プレイヤー側からサーバーへ通信できます。
サーバー側のScriptでは、
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")
remoteEvent.OnServerEvent:Connect(function(player)
print(player.Name .. "から通信が届きました!")
end)
とすることで、その通信を受け取れます。
このようにRemoteEventを使うことで、プレイヤー側とサーバー側をつなぐことができます。
RemoteFunctionとは?
ReplicatedStorageには、RemoteFunctionを置くこともできます。
RemoteFunctionもサーバーとプレイヤー側で通信するための機能ですが、RemoteEventとは少し違います。
RemoteEventが、
「これが起きました!」
と相手に通知するのに向いているのに対して、
RemoteFunctionは、
「この情報を教えてください!」
のように、相手から結果を受け取る通信に向いています。
例えば、
プレイヤー側
「自分の所持金はいくらですか?」↓
サーバー
「1000です」↓
プレイヤー側
というような処理を作ることができます。
ModuleScriptも置ける
ReplicatedStorageでは、ModuleScriptもよく使用されます。
ModuleScriptは、複数のスクリプトから利用したい処理やデータをまとめておくためのものです。
例えば、
ReplicatedStorage
└─ ModuleScript
というModuleScriptを作ります。
中に、
local Module = {}
function Module.Hello()
print("こんにちは!")
end
return Module
と書きます。
別のScriptから、
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Module = require(ReplicatedStorage:WaitForChild("ModuleScript"))
Module.Hello()
とすることで、ModuleScriptにまとめた処理を利用できます。
ゲームが大きくなってくると、同じ処理を何度も書くのではなく、ModuleScriptにまとめることでコードを整理しやすくなります。
ReplicatedStorageに何を入れる?
ゲームが大きくなってきたら、Folderを使って整理すると分かりやすくなります。
例えば、
ReplicatedStorage
├─ Remotes
│ ├─ BuyItem
│ └─ EquipItem
│
├─ Modules
│ └─ ItemData
│
└─ Assets
└─ Items
のような構成です。
Remotes
→ RemoteEventやRemoteFunctionを入れる
Modules
→ ModuleScriptを入れる
Assets
→ 共有して使うModelなどを入れる
というように分類しておくと、後から管理しやすくなります。
注意!重要なデータは置かない
ReplicatedStorageは便利ですが、何でも入れていい場所ではありません。
ReplicatedStorageに入っているものはプレイヤー側にも複製されるため、プレイヤーに見られてはいけない情報を置く場所には向いていません。
例えば、
- 秘密にしておきたいデータ
- サーバーだけで処理する重要な処理
- プレイヤーに公開したくない情報
などは、ReplicatedStorageに置かないようにしましょう。
こうした情報は、サーバー側だけから利用できる場所で管理するのが基本です。
このあたりは、今後「サーバーとクライアント」について詳しく学ぶと、より理解できるようになります。
ReplicatedStorageは非常に重要!
ReplicatedStorageは、単なるデータ置き場ではありません。
サーバーとプレイヤー側で共有するものを管理したり、RemoteEventなどを使って両者を通信させたりする重要なサービスです。
特に、
ReplicatedStorage
↓
RemoteEvent
↓
サーバーとプレイヤー側の通信
という仕組みは、Robloxで本格的なゲームを作るならぜひ覚えておきたいものです。
まずはReplicatedStorageにFolderやRemoteEventを追加して、実際にスクリプトから取得してみるところから始めてみましょう!

コメント