RemoteEvents:Client to Server

Level : Robloxのレッスン1〜4を終了したレベル

今回は、Robloxのリモートイベントを使用し、クライアントからサーバーに通信する方法を学習していきましょう。これはRobloxでのマルチプレイヤーゲームの一般的な機能を理解できるコードの書き方になります。

リモートイベントというのは、クライアントー>サーバーに通信するとき使用します。サーバーはインターネットで繋がっている大きな強力なRobloxコンピューターで、クライアントは、パーソナルコンピューター、携帯、タブレット、またはゲームコンソールです。

クライアントが、サーバーと通信するには、リモートイベントとリモートファンクションの2つのリモートのどちらかを使用します。

リモートイベントは、one-way communicationというデザインがなされていて、リモートファンクションはtwo-way communicationというデザインで構成されています。

リモートイベントには4つの使用方法があって、それぞれ情報の送信の仕方が目的によって異なります。

https://developer.roblox.com/en-us/articles/Remote-Functions-and-Events

この方法は、例えば、ユーザーがロブロックスのゲームを実行し、キーボードの ” e ” を押した時、新しく作成されたパーツがサーバー上のすべてのユーザーの画面に表示されるようになります。

その他のリモートイベントとリモートファンクションの使用方法は、…今のところは、リンク先からご参考にされて下さい。

下記リンク先のステップは、Robloxスタジオのインターフェイスを学習します。なんでも最初は真似してみましょう。このステップをやってプログラムが上手く走ると、サーバーと通信してパーツを表示することができます。

  • Robloxのサイト:Remote Functions and Events
    • Using Remote Events(2ステップ)
      • Client toSeverを行って下さい。(3ステップ)

上記の内容のステップができたら、実際にパーツが作成されるかどうかテストをしましょう。


さらに詳しく学習したい方は読み進めて下さいね。


RemoteEvents:クライアントからサーバーへ

このプログラムの最終目的は、プレーヤーがキーボードの” e ”のキーを押したら新しく作成されたパーツがサーバー上のすべてのユーザーの画面に表示されるようにサーバーに指示することです。

FireSever()関数をRemoteEventのOnServerEventに接続しました。FireServer()関数についてもっと詳しく学習しましょう。

  • この関数はクライアントからサーバーへの通信に使用されるため、クライアント側のLocalScriptで使用された場合にのみ機能します。
  • インベントを発動したプレーヤーにパラメーター内のイベントが起動します。
  • この関数はクライアントから起動する場合、FireServer()関数に起動させたいデータを含めます。(デフォルト設定:player引数が渡されます。)
  • FireServer()関数で他の引数が指定されている場合、それらはプレーヤー引数の後にOnServerEventにも含めます。
Vector3とCFrameの位置関係

パーツが表示される位置について、例えば、パーツをアバターの目の前に出現させたい場合、CFrameの位置のコンポーネントを、Vector3のようにXY、およびZプロパティでも使用できます。回転せずに特定の位置に配置されたCFrameは、CFrame.new(Vector3)またはCFrame.new(X, Y, Z)を使用して構築できます。

-- Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")

-- Create a new part
local function onCreatePart(player, partColor, partPos, partMaterial, bool)
	print(player.Name .. " fired the remote event")
	local newPart = Instance.new("Part")
	newPart.BrickColor = partColor
	newPart.CFrame = player.Character.Head.CFrame*CFrame.new(partPos)
	newPart.Material = partMaterial
	newPart.Anchored = bool
	newPart.Parent = workspace
end
 
-- Call "onCreatePart()" when the client fires the remote event
remoteEvent.OnServerEvent:Connect(onCreatePart)


最後にプレーヤーがキーボードの” e ”のキーを押したらパーツが作成できるようにコンピューターに指示していきましょう。UserInputService はクライアント側のみで使用できるため、LocalScriptを使います。クライアント側のみで使用できるということは、ゲーム内のユーザーが ” e ” のキーを押しパーツの作成においては、自分の入力のみを検出でき、他のユーザーの入力は検出できないということです。

--localscript
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")
local userInputService = game:GetService("UserInputService")
local Player = game.Players.LocalPlayer
local Mouse = Player:GetMouse()

local function onKeyDown(key)
	key = key:lower()

	if key == "e" then
	-- Fire the remote event
	-- Include additional data when firing the event
		remoteEvent:FireServer(BrickColor.Red(), Vector3.new(0, 0, -5),Enum.Material.Brick, true)
	end
end	
Mouse.KeyDown:connect(onKeyDown)

いかがでしたでしょうか。*動画でもRemoteEventのクライアントからサーバについての説明をご覧頂けます。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: