ゲーム内で武器を使って相手を攻撃する方法
Robloxフォーラムから
Robloxのフォーラムサイトでも話題を呼んだ「The weapon does not kill the player」の投稿は、Roblox開発者がゲーム開発を始めると、最初に気がつく問題ではないのでしょうか。今回は、リモートイベントの仕組みを考える良い機会です。難しいようにみえても、意外と簡単だったということもありますので、コードがうまく走らないで悩んでいるのは自分だけではないと、仲間をみつけた気分で読み進めて下さい。また、このフォーラムサイトは、経験豊富なRobloxのプログラマーが親身になって問題を解決に導きます。もしご興味がある方は覗いて見て下さい。何かを得れる可能性が高いと思います。

何が起きているのでしょうか。
ローカルプレーヤーとサーバー側が繋がっていないので、ゲームを公開しても相手のプレイヤーを武器で倒せないということが生じています。せっかくゲームを作ってもこれでは悲しいですよね。ですが、この解決策として、上のフォーラムサイトでも、FireSeverメソッド を使うようにと促しています。こうなると早速、Remote Eventを学習することにつきます。
*下記の動画:「#63ゲーム内で武器を使って相手を攻撃する方法」にて詳しく例を使って述べています。
ですので、ここでは、簡単にFireSever()メソッドのみ焦点を当てて、剣で相手に攻撃を与えるコードの構造に少し触れていきましょう。
“Oof”をするコード VS FireServer()を使うコード
下のイメージでは、ローカルプレーヤーのクライアントレベルから、サーバレベルに接続できるコードを赤線で引いて、上下に並べて比べ易くしました。上の「Oof」をするコード、LocalScriptLocalの11行目に注目して下さい。ここでは、アバターがパーツに触れるとアバターの健康、ヘルスをゼロに設定することで、アバターがダメージを受けたことが分かりますが、一方、下のコード、LocalScripteSeverでは、最初の2行のコードで、RemoteEvent
インスタンスをポイントし、次の13行目のFireServer()
メソッドでイベントを発生させ、サーバに接続しています。そして、その他のコードについては、変数名を除いては、コードの構成は変更してない事がわかります。

ファイアー!!
ServerScriptService
内に、Scriptを作成したら、その内のコードで、RemoteEvent
インスタンスをポイントし、関数をOnServerEvent
に接続します。アバターのヘルスをゼロに設定するコードの代わりに、ここでリモートイベントを使用して、TakeDamageの関数にてダメージが100に到達するまでイベントを生じることをしています。この関数は、剣が相手のプレーヤーに触れる度に呼ばれ、相手がダメージを受けている処理を行ってくれます。そしてそれは、サーバー上のすべてのユーザーがその変更を知ることができるようになっています。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")
-- プレーヤーにダメージを与えます。
local function onCreatePart(player, other)
other:TakeDamage(10)
end
-- リモートイベントが発生したとき "onCreatePart()" を呼び出します。
remoteEvent.OnServerEvent:Connect(onCreatePart)
動画では、「Roblox Studio」 にて武器を作って相手に攻撃をしダメージを与える一連のコードの構成をまとめましたので、どうぞご参考にされて下さい。
動画も含め、以上の内容が理解できると、ゲーム開発の第一突破口となればと願います!