ReplicatedStorageとは?使い方とRemoteEvent・ModuleScriptを解説

ここまでで、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を追加して、実際にスクリプトから取得してみるところから始めてみましょう!

コメント

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