
今回のコードはこちらを参考にしました。(Scriptのコードはこの参考リンクのDeveloperのサイトから取得して下さい。)
また動画#59と63でも、RemoteEvent
を使用して簡単な例を使って説明しています。
今日は、クライアントからサーバーへの通信について学びます。 クライアントが他のクライアントに直接ダメージを与えることはできないので、プレイヤーが銃に撃たれたときにダメージを与える責任はサーバーにあります。クライアントはリモートイベントを作成して、キャラクターが銃に撃たれたことをサーバーに伝えることができます。これらのイベントは、クライアントとサーバーの両方から見えるように、複製されたストレージReplicateStorageに保存する必要があります。
まず、ReplicateStorageにEventsという名前のフォルダを作成します。次に、リモートイベントをEventsフォルダに作成し、DamageCharacterという名前で保存します。

ToolControllerでは、スクリプトの最初に、ReplicatedStorageとイベントフォルダのための変数を作成します。Fire weaponの ”player hit” プリントステートメントをルラ言語のラインに置き換えて、キャラクターモデル変数を引数にしたDamageCharacterリモートイベントを実行します。
eventsFolder.DamageCharacter:FireServer(characterModel)
新しくスクリプトをServerScriptServiceに作成し、ServerLaserManagerという名前を付けます。
他のプレイヤーのレーザービーム
現在、レーザービームを見ることができるのはクライアントだけです。
なので、レーザービームをサーバー上で作成し、誰もがそれを見ることができるようにします。まず、クライアントはサーバーにレーザーを発射したことを伝え、終了位置を提供する必要があります。
- RemoteEventをReplicateStorageのEventsフォルダーに挿入したLaserFiredと繋げます。
- ToolControllerスクリプトで
fireWeapon
関数を見つけます。関数の最後で、引数として使用してLaserFiredリモートイベントを発生させます。

eventsFolder.LaserFired:FireServer(hitPosition)
サーバー
サーバーは、クライアントが起動したイベントを受信し、すべてのクライアントにレーザービームの開始位置と終了位置を通知して、レーザービームをレンダリングできるようにする必要があります。
- ServerLaserManagerに関数playerFiredLaserと呼ばれる2つのパラメータを持つ
関数を作成ます。引数はplayerFiredとendPosition
です。 - 関数をLaserFiredリモートイベントに接続します。
サーバーにはレーザーの開始位置が必要です。これはクライアントから送信される可能性がありますが、可能な限りクライアントを信頼しないようにするのが最善です。キャラクターの武器ハンドルの位置が開始位置になるので、サーバーはそこからそれを見つけることができます。
クライアントでのレンダリング
- StarterPlayerScriptsでClientLaserManagerと呼ばれるLocalScriptを作成。
- スクリプト内で、LaserRendererモジュールが必要です。
- createPlayerLaserの関数を作成しパラメータに
playerWhoShot
、toolHandle
とendPositionを設定します
。 - 関数をEventsフォルダーのLaserFiredリモートイベントに接続します。
- 関数で、ifステートメントを使用してLocalPlayerとplayerWhoShotが等しくないかどうかを確認します。
- ステートメント内で、LaserRendererモジュールの
toolHandle
とendPosition
を引数としてcreateLaser
を関数を呼び出します。
ローカルサーバーを起動して、2人のプレーヤーでブラスターをテストします。両方のウィンドウを同時に表示できるように、各クライアントをモニターの異なる側に配置します。一方のクライアントで撮影すると、もう一方のクライアントでレーザーが表示されます。
音響効果
射撃効果音は現在、発射物を射撃しているクライアントでのみ再生されます。他のプレイヤーにも聞こえるように、サウンドを再生するにはコードを移動する必要があります。
- ToolControllerスクリプトにナビゲートtoolActivatedの機能とアクティブサウンドを果たしている行を削除します。
射撃効果音は現在、発射物を射撃しているクライアントでのみ再生されます。他のプレイヤーにも聞こえるように、サウンドを再生するにはコードを移動する必要があります。
シリーズの動画
- #64:Roblox ゲーム内で使用する銃の作り方
- #65:Roblox ゲーム内で使用する銃の効果音のスクリプト
- #66:衝突を見つけるためのレイキャスティング
- #67:レイキャストが武器を発射:プレイヤーと誤って衝突しないようにする
- # 68:レーザービームのレンダリング・ CFrame()を使ったポジションと方向の割出し