今回のコードはこちらを参考にしました。(Scriptのコードはこの参考リンクのDeveloperのサイトから取得して下さい。) また動画#59と63でも、RemoteEventを使用して簡単な例を使って説明しています。 今日は、クライアントからサーバーへの通信について学びます。 クライアントが他のクライアントに直接ダメージを与えることはできないので、プレイヤーが銃に撃たれたときにダメージを与える責任はサーバーにあります。クライアントはリモートイベントを作成して、キャラクターが銃に撃たれたことをサーバーに伝えることができます。これらのイベントは、クライアントとサーバーの両方から見えるように、複製されたストレージReplicateStorageに保存する必要があります。 まず、ReplicateStorageにEventsという名前のフォルダを作成します。次に、リモートイベントをEventsフォルダに作成し、DamageCharacterという名前で保存します。 ToolControllerでは、スクリプトの最初に、ReplicatedStorageとイベントフォルダのための変数を作成します。Fire weaponの ”player hit” プリントステートメントをルラ言語のラインに置き換えて、キャラクターモデル変数を引数にしたDamageCharacterリモートイベントを実行します。 新しくスクリプトをServerScriptServiceに作成し、ServerLaserManagerという名前を付けます。 他のプレイヤーのレーザービーム 現在、レーザービームを見ることができるのはクライアントだけです。 なので、レーザービームをサーバー上で作成し、誰もがそれを見ることができるようにします。まず、クライアントはサーバーにレーザーを発射したことを伝え、終了位置を提供する必要があります。 RemoteEventをReplicateStorageのEventsフォルダーに挿入したLaserFiredと繋げます。 ToolControllerスクリプトでfireWeapon関数を見つけます。関数の最後で、引数として使用してLaserFiredリモートイベントを発生させます。 サーバー サーバーは、クライアントが起動したイベントを受信し、すべてのクライアントにレーザービームの開始位置と終了位置を通知して、レーザービームをレンダリングできるようにする必要があります。 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()を使ったポジションと方向の割出し その他参考にしたサイト ReplicatedStorage