日本のRobloxゲーム制作スクール

ゲーム好きで開発者が集まる場所として、 Robloxの公式サイトのコミュニティーがあります。ここでは、初級者から上級者レベルまで、開発に対しての疑問や意見を気軽に交換することができ、誰もが利用することができることから、それによって、学習を途中で諦めることもなく、続けられるシステムになっています。実は、私もよく利用させてもらっていて、以前、ほぼ同じことで悩んでいる人を見つけ、それだけで(私は馬鹿ではなかったと)安心したものでした。疑問点とその解決法を読みながら、この知的好奇心をオープンに共有できる世界観こそ、映画や本の小説になってもいいほど、「美しい心」と言え、だから、これからの時代にあったコミュニティーの在り方であり続けると考えています。そんなことをぼんやり思っていたら、日本の若い世代の方が、ボランティア活動にてコミュニティーサイトを開いてくれているので、いよいよですと期待せずにはいられないと思いました。 *サイトを利用するには、【Devlox】Robloxゲーム制作スクールのコミュニティーへの登録が必要です。 コミュニティーは、幾つかのカテゴリに整理されています。その内の学習サイトでは、難しいと思われる「Tween」、「Vector3」や、「CFrame」等を簡単に学べることが可能で、これには、本当に高い価値があると思いました。それは、日本語だからだけではなく、シンプルで分かりやすい例を幾つも見ることができる構成になっているからだと思います。内容の順を追ってパーツを作成すると、コードを応用として取り入れることが簡単にできるのに気がつきました。(下の動画は、ゲームの終わりに華やかなゴールの演出ができる様にと応用として作成したものです。) さて、このサイトのさらに画期的な事は、ゲームの「know-how」を100%惜しみなく提供していることです。優れた開発者のゲームのコードに触れることで、コードの学習スキルを上げる良い経験になるのは想像つくと思いますが、このコミュニティーの新しいところは、分からないことがあれば、誰でもコミュニティーの中で、ベテランの開発者の人から、アドバイスや意見の交換ができる様になっているところだと思います。それこそ先に述べた、「ゲーム好きで開発者が集まる場所」で気軽に質問できる空間になっていると思いました。 子供の頃に感じる、摩訶不思議な世界を解き明かしてみたくなる気持ちを覚えていますか。その感覚は、友達とゲームをしている時や、はたまた、外で自然と触れ合っている時かもしれません。そして、それはもしかしたら、学校では学べないことかもしれません。でも、今、一つ言えることは、それがもしゲーム開発への知的好奇心だったならば、疑問や不思議を膨らませ、自分で理解する喜びや、楽しさを味わえる場所が、この場所であると思っています。これからの子供たちに必要なプログラムの知識を、オープンな場所で学習できることは、きっとこれからも良い道標になると思います。 Discordの登録は13歳からですが、コミュニティーの学習サイトの利用は、そこからのリンクから閲覧できます。先ずは、登録して様子を見るのが良いと思います。 【Devlox】Robloxゲーム制作スクール サイトURL:https://devlox.net/

How to Make a Rainbow Trail

レインボートレイルの作成(2022) 今日は、レインボートレイル、虹が出てくるコードをRobloxで学習していきましょう。Robloxの利点は、コードを実行したら直ぐに結果が出ることなんですが、学習した内容についてコードを見ると、少し難しいと思うかもしれませんが、挑戦してみて下さい。できたらコメントで教えてもらえると嬉しいです。 では、パーツを作成して、グループを選んでモデルに変更します。タッチイベントを練習してTouched Eventの書き方に慣れてくると思います。 Trail作成 Trailの作成の仕方はご存知ですか。作成後、 アバターに接続されるようにコードを書いていきます。 エクスプローラの [Workspace] に作成したモデル.partで、カーソルを合わせて、+ ボタンをクリックします。オブジェクトリストが表示されます。[Trail] が見つかるまでオブジェクトの リストを下にスクロールして探してクリックします。 Trialが作成されたら色を変更します。変更の仕方は、プロパティのColorで、数字の255の右横にある、…省略記号をクリックすると、Colorボックスが出てきますので、色のボックスをクリックして、色を選んでください。色を付け加えたい場合は、三角形の箇所をマウスでクリックし追加すると、そこから新しい色を追加することができます。 スクリプト Partにカーソルを合わせて、+ ボタンをクリックします。[スクリプト] を選択し、クリックして開きます。 次に、スクリプトにコードを配置する必要があります。以下のコードをコピーして貼り付けることができます。 スクリプトをコピーして貼り付けた後、プログラムをテストして実行してください。

Robloxのアバターを一瞬で変える

ロブロックスを始めた2年前、私のアバターはディフォルトのアバターでしたが、その後、ロブロックスの無料のアイテムや、自分でシャツやズボンを作成したりと、色々試した後、お気に入りのアバターを入手してみました。2021年に、アバターの形がブロック型か下記のようなイメージのアバターで、眉や目、口の表情を変えることができるようになったり、アクセサリー等、重ね着ができるようになりました。 *自分で新しいアバターを調べたい場合は、Robloxのスタッフメンバーのdarkmodeonnによる、このフォーラム投稿にそのアバターの情報の説明があります。 何はともあれ、Robloxのキャラクターは、あっという間にその数が増え、今では、アバターのパーツを好きに組みわせることで、自分のオリジナルも簡単に作成出来るどころか、これからも更に進歩していく様子です。 という訳で、これからのアップデートも期待大のアバターですが、最後にコードの中でアバターを変更する簡単な方法をお見せしたいと思います。今回は、ヒューマノイドディスクリプション を使用して、スタジオの中で自分のアバターを変更し、ヒューマノイドがどのような作りになっているかを見ていきましょう。 今日使用するのは、Spawn Characters With HumanoidDescriptionのセクションのコード。これをコピペして下さいね。 当時、使ってみたらあっという間に成功したので、アバターが変わる様子が面白いと、皆さんも感じること間違えないと思います。みなさんにも知ってほしいなと。こんなに簡単なんだなって。いいですよね。 最近のプログラムソフトは、本当に使いやすいので。。。、と言っても、私もまだRobloxを始めて2年目なので、興味を持つきっかけを作ったその当時のことを思い出します。 そうそう、コードを見て、何にもわからなくてもいいと思います。私も、「何これ〜〜」って思って始めました(笑)。でも、少しでも心惹かれたら、Robloxのスタジオを開けてやってみてもいいと思いませんか。キッカケなんてそんな大したことでなくていいはずで、ちょっとした直感でやって大丈夫だと思います。 こちらは、上記のヒューマノイドディスリプションのリンク先のサイトから、コードを変更したものを、貼り付けておきます。皆さんも試してみて下さい。

翻訳されたゲームの作成

Localization 入門 ゲームの世界では、ボタン、キャラクターの会話、標識 などに各国固有の言語を表示するのが理想的です。  と言うわけで、日本のゲームには欠かせない、ローカリゼーションポータルの使用方法の入門編を紹介します。ゲームのメインページに移動して、横に並んだ3つの点のボタンをクリックすると、メニューの中から多言語化の環境設定を見つけて選択します。 ポータルに入ったら、[Setting]設定タブをクリックし、[Automatic Text Capture(ATC) ]をオンにします。 翻訳の追加と管理 [Langage]言語セクションでは、最初に、ゲームのソース言語を設定します。Roblox Studioで作成したゲームが、完全に日本語でサポートされているので、日本語の言語を1つ設定します。 次に、下の[Supported Language]翻訳された言語セクションで、英語を選択します。 Translateのボタンをクリックすると、翻訳を管理できる[翻訳の管理]ページが開きます。 *ATCがローカリゼーション ポータルにテキストを挿入するまでに3〜4分かかる場合がありますので、それまで待ちましょう。 今回は、自分で翻訳を書き込む方法をお見せします。この翻訳はそのまま残り、自動翻訳の機能は、翻訳のできてないエントリのみが入力されるので、自分で入力した文を自動翻訳が上書きすることはありません。 *1か月後に自動翻訳が再実行され、ローカライズが保証されます。 翻訳を活用する ゲームで翻訳されたコンテンツを利用する準備ができたら、ポータルの[Setting]セクションに戻り、 [翻訳されたコンテンツの使用]を有効にします。 有効にすると、ゲームテストモードを使用して、RobloxStudio内で直接翻訳をテストできます。 Studioの[テスト]タブから。 [仮想化]セクションで、[プレーヤー]ボタンをクリックします。 プレイヤー仮想化機能が開いたら、[テストプロファイルを有効にする]をオンに切り替えて、仮想化を有効にします。ウィンドウを閉じても、エミュレーションは切り替えられたまま(有効または無効)のままであることに注意してください。 マルチクライアントシミュレーション [クライアントとサーバー]セクションで、上部のボックスで[ローカルサーバー]が選択されていることを確認します。テストするプレーヤーセッションの数を選択します(通常は「1プレーヤー」で問題ありません)。 開始ボタンを押して、クライアントサーバー仮想世界を開始します。終了時はクリーンアップボタンを押して終わらせます。 この時点でゲームを公開すると、ゲームの本番バージョンに翻訳が適用されることに注意してください。

扉を「開閉させる」

動画の内容 Robloxの素晴らしい物理システムは、私たちがRobloxスタジオを使用して、ドアや蓋を開閉させたり、車両などの移動メカニズムを構築できるのにとても役に立ちます。今日は、HingeConstraintというのを使用して「開閉させる」スイングドアを作成していきます。 ドアは、ドアの部分とドアのフレームの2つのパーツが必要になります。ドアノブをつける場合は、ドアとドアノブをユニオンして使用します。ドアには、アンカーをつけないで、ドアのフレームにのみ「固定」を有効にして移動しないようにします。 エクスプローラーで、Doorにカーソルを合わせ、新しいアタッチメントを追加します。同じことをDoorFrameにも繰り返して、DoorFrameにアタッチメントを追加します。 それぞれの名前をDoorAttachmentとFrameAttachmentと、アタッチされているものを示します。 DoorAttachmentとFrameAttachmentそれぞれのプロパティを使用して、黄色のアタッチメントを上向きにします。黄色の軸がすでに垂直である場合、アクションは必要ありません。 2つのアタッチメントを接続したら、今度は、 DoorFrameの下に、新しいHingeConstraintを作成します。 HingeConstraintのプロパティで、LimitsEnabledを見つけて切り替えます。必要に応じて、LowerAngleとUpperAngleそれぞれの角度を設定します。 このままでは、ドアはスイングしませんので、ドアとフレームを繋げます。HingeConstraintのプロパティでAttachment0を見つけ、右側にある空のボックスをクリックしてから、エクスプローラーで[ DoorAttachment ]をクリックします。 同じように、Attachment1をFrameAttachmentに接続します。 では、ドアをテストして、ヒンジが制限されていることに注目して、今日は、この辺で終わりにしたいと思います。ありがとうございました。 ドアが完成したら、トラップドアやスイングトラップなど、さまざまな状況でヒンジの拘束を使用して探索してみて下さい。 参考サイト:https://developer.roblox.com/en-us/onboarding/building-a-hinged-door/2

ゲームで遊ぶから開発へ

今の時代、ゲームプレイが上手だとお友達から一目置かれるほど、ゲームの世界は、私たちの生活の一部に溶け込み、娯楽、家族の団欒、友達との交流の場としてゲームと上手に向き合うことを意識した方が良いように思えてきました。それに共ない、ゲームをしたお子様なら一度は、こんなゲームが作れたらいいなと、「自分のゲームの世界」の夢を描いて、興味を持っていることが「2020年1月 小中学生のプログラミング教育に関する意識調査」から解ります。しかし、この調査の中で気になるのが、プログラムの世界に興味を持たれてはいるものの、プログラミングは学習難易度が高いためか、不安を抱かれている方が見受けられたことです。ゲームと上手く付き合うように、私たちはプログラミングとも楽しく向き合えるようになるよう、意識の向け方を少し変えたら良いと思います。 「開発の中でヒーローになる」 プログラミングも、ゲームで遊ぶように練習を重ねれば上手になることができます。ただし、プログラミングをやる事で、ゲームプレイが上手なお友達の中でヒーローから「ゲーム開発の中でヒーロー」:国際的なヒーローを手に入れることができます。それは、オンラインで繋がったゲームを開発する「自分のゲームの世界」が作成できることで可能にしてくれます。例えば、アジア圏でも、最近、人気急上昇中のRobloxは、開発したゲームを簡単に公開することができますが、それらはすべて無料でできます。Roblox Studioは、国際教育工学会の基準を取得したソフトですので、安心して学習できますし、しかも、ビジネス面でも若いうちに契約の仕方や著作権法を勉強できる良い機会になる可能性があります。Robloxのゲーム開発は、それこそ国際配信ができる優れたツールでもあるので、機会があれば試して頂きたいと思います。 「チャレンジへの耐性がつく」 とはいえ、プログラムやゲーム開発はゲームプレイよりもチャレンジです。その為、学習する過程でチャレンジ精神と忍耐がつくという利点があります。ゲームプレイはゴールに達成するために、試行錯誤を何度もくり返しレベルアップしていきます。プログラムも同様に、繰り返しは、一つ一つの問題が上手く動くか試してみて、その度に動くまで繰り返しコードを変えていきます。プログラマーさんはプログラムを書いて最初から成功するということはありません。一つ一つを上手く動くかテストしていきますし、そうでないと先に進めないので、このチャレンジ精神は、開発を通じて身につく力だと思います。 「プログラムの世界は全てに通じる」 これからの時代は、テクノロジーができることが主流になります。現在、子供の世界でゲームをまったくやらないで生きていくのは非常に難しいと思います。それは冒頭にも述べた通りです。それではプログラミングの世界はどうでしょうか。今後、プログラミングができれば、「ものごとを考える方法」すなわち、論理的な思考ができるようになります。これは一つの例ではありますが、スピードが増す複雑な情報社会の中で、必要なものを正確に捉えることができるマインド、ストレスを和らげ生きやすくしてくれることに繋がります。プログラムをまったくやらずに子どもの世界を生きていくというのは、ゲームをやらずに生きていく以上に、きっと非常に難しいことになると思います。お子様の為にも、焦らず、今、出来る事から始め、大学生になるまでに、コンピューターサイエンスの基礎が身につく準備をしていけば良いと思います。 「ゲームで遊ぶからゲーム開発へ」は、テクノロジーの世界の冒険の始まりと言うよりも、もっと現実味のある未来への確実な一歩にしていきましょう。プログラミングのお教室で、お子様が生き生きとテクノロジーを学ぶ喜びを感じられることを願っています。

Lesson1.3

ロブロックス3DスタジオのLua言語はとても学習しやすく、面白いです。コードが好きな方、ちょっと苦手な方も←是非、チャンネル登録と、いいね!ボタンを押して下さい。(YouTube:Nihongodecode) 今日は、変数を学習します。パーツを透明にするという簡単な方法から学びましょう。 パーツを透明にする手順書 Lesson1.1でプログラムとは手順書を作ることだと学びました。そして、プログラミング的思考についても触れました。 小さく分けて考える(分解) 手順の組み合わせを考える(組み合わせ)・パーツの場所を支持して、その後にプロパティーにアクセス パターンを見つける(一般化) 大事なものだけぬき出して考える(抽象化) 頭の中で手順をたどる(シュミレーション) 今回は、2.手順の組み合わせ に注目します。最初にパーツの場所を変数に設定することで、その後、パーツのプロパティーにアクセスしていきます。 それでは、パーツを一つ出して、スポーンロケーションの近くに置いて下さい。そうすることで、スタート地点から、コードを走らせた結果が直ぐにわかります。パーツの大きさをスケールボタンで大きく、長くして壁を作ります。これは後ほど、ガラスなどのように向こうが見通せる壁で、アバターがベースプレイトの縁から落ちない様にできます。パーツの名前を「Wall」や「WallPart」等の目的にあった名前をつけて下さい。私が使用するパーツは、「Wall」にします。この時、Wallの頭文字、Wを大文字で書いて下さい。 さて、コードを書く前に「Wall」のプロパティー、「Transparecy」というオブジェクトの値が0から1に変更することを確認しましょう。1の値を設定するとガラスなどのように向こうが見通せますが、0だと見通せません。この状態では、コードを走らせると壁が見えていますね。では、透明な壁をコードで作成していきます。 早速、「Wall」の中にスクリプトを作成していきましょう。エクスプローラのWorkspaceの下にある「Wall」にマウスを持っていくことで、プラスのボタンが現ます。ボタンをクリックして小さなウィンドウから「Script」を選択して下さい。 今回は、最初にパーツの場所を変数に設定し、コンピューターにパーツの場所を教えて上げます。 Local 変数の宣言は、ローカルのgame内で使用限定の意味です。ドット「.」で次のサービスの Workspaceから次のオブジェクトを「.」でパーツ名の Wallで続けて書きます。 変数のwall(頭文字が小文字のキャメルケースを使用)は、「=」で文字列を宣言します。 変数は、算数の 等号の「 = 」 のサインを使います。しかし、これは等号の意味でないことに注意して下さい。変数では、右の値を左の値に設定しています。 次にプロパティーとアクセスしていきましょう。 エンターキーを押して、二行目から、変数のwallを使用し、ドットを押し、「T」とタイプすると、関連するクラスやオブジェクトがプールメニューに表示されます。「Transparency」を選ぶのに矢印KeyとTabKeyや、マウスで選択しエンターを押して、「 = 」1をセットします。コードを走らせて壁が透明になるか確認しましょう。 まとめ 今回は変数を学習しました。可能な限りローカル変数を使用することは良いプログラミングスタイルです。複雑なロジックのプログラムを書いたときでも、コンスタントにコードの書き方変えないで良いコードの書方をしていきましょう! 私は、小学生、中学生、高校生から大人まで、プログラミングに興味がある方へ、ロブロックスのゲームって簡単で面白いと思ったことをお伝えしています。コードが好きな方やちょっと苦手な方も←是非、いつでも遊びにいらして下さい。

RGB(フルカラー)LEDによる色の変更

ラズベリーパイプログラミング入門の1章で行ったことを説明します。先ず、3つのLEDをRaspberryPiボードに接続しました。その後、これらのLEDを点滅させました。次に、Raspberry PiGPIO入力を読み取りました。これらの基礎的なステップは、ラズベリーパイを学習するのに役立ちます。この記事は、1章の最後に学習する、RGBLEDを介していくつかの色を表示する方法を説明します。 第1章の最後は、基本的なLEDプログラミングになります。それは、RGBLEDを使用することです。このLEDは単色の光を発することができます。これは、RGBと呼ばれる赤、緑、青の3つの原色のいずれかになります。 以下の ハードウェアコンポーネントが必要です: A Raspberry Pi 2 board An RGB LED (https://www.sparkfun.com/products/9264). RGBLED接続を次の図に示します。 完全なハードウェア配線を次の図に示します。 RGBLEDピン1はRaspberryPiGPIO22に接続されています RGBLEDピン2はRaspberryPi VCC GNDに接続されています RGBLEDピン3はRaspberryPiGPIO23に接続されています RGBLEDピン4はRaspberryPiGPIO12に接続されています このセクションでは、RGB LEDを介して赤、緑、青の色を表示する簡単なPythonプログラムを作成します。 プログラム出力は、RGBLEDが毎秒特定の色を表示することを確認する必要があります。現在のRGBLEDにある色を示すメッセージをプリントステイトメントに書き込みます。 メインプログラムdisplay()では、下記のコードに示すように、赤、緑、青の値を渡すことにより、関数を介して色を表示します。 こちらのサイトは、初心者の方で購入にお悩み中の方へ参考になりますのでどうぞ! https://sozorablog.com/raspberrypi-erabikata/ アッセンブリーをやっていたと思われる方がラズベリーパイを紹介されています。

NPC簡単なダイアログ

ダイアログ「吹き出し」を作ってみよう! ハイみなさん、こんにちは!日本語デコードチャンネルです。 今日はダイアログボックスを使用して、「ノーコード」でNPCと対話を作成していきましょう。 私は、ロブロックスのゲーム学習は面白いと思ってお伝えしています。コードに興味のある方、好きな方、得意な方、←是非、チャンネル登録して下さい。いいね!ボタンも押してね〜! 早速、色々なNPCの種類が選べる、プラグインを使用してみましょう。プラグインは個別に追加してスタジオのバージョンアップができ、不要になればいつでも削除できます。 今回のプラグインはLoad Character Liteです。プラグインのタブからプラグインの管理ボタンをクリックして、青いプラスのボタンをクリック、Load Character Liteのアイコンをクリックしてスタジオに追加します。私は既にこの機能を拡張済みですからここではクリックしません。 さて、ベースプレイトに入って、プラグインタブをクリックすると、LoadCharacterLiteのボタンがありますね。クリックするとキャラクターが表示されます。文字を一文字消す等すると、別のキャラクターが現れます。R15またはR6のボタンを選択して、自分の好きなNPCを探して下さい。NPCの緑の球体は、ゲームを実行すると見えなくなりますが、これはキャラクターのコンストレインです。 お気に入りがみつかりましたか。私は、この虹色の羽のNPCを今日は使います。 では、早速、エクスプローラウィンドウに入って、NPCのキャラクタのツリーを展開しましょう。モデルの左横の小さい矢印をクリックすると、展開します。ツリーの下のチャイルドたちが展開しているのがわかりますか。なので、これらをクローズし、Headパーツを見つけます。 吹き出しは「Head」頭の部分から表示された方が読みやすいので、Headオブジェクトを使います。最初のプロンプトを表示させるのに、Headパーツの右隣のプラスのボタンをクリックし、小さなウィンドウから「Dialog」を選んで下さい。 プロパティウィンドウに入って、「Initial Prompt」に話す為の最初の部分をタイプします。このプロパティではさらにカスタマイズできます。例えば、Conversationdistance:パートとの会話が可能な最大な距離を設定するので、距離内で開始し、それから歩いて出ると、会話は終了します。 DialogPurpose:クエスト、ヘルプ、そしてショップとパーツの上に表示されるアイコンが異なります。 DialogTone:これは会話の色です。フレンドリー、ニュートラル、そして敵と選ぶことができます。 さらに吹き出しを追加して会話を選択しましょう。さっき作った「Daialog」の下に「Dialog Choice」を追加します。先の会話に応対する部分は、「UserDaialog」で、その続きの会話についての答えを「ResponseDialog」にタイプして下さい。「GoodbyeChoiceActive」をクリックし、GoodbyeDaialogをタイプし、会話が終了する選択ができるようになります。 ツリーのレベルを一緒にすると、同じ選択技の中に表示され、ツリーのレベルを追加し、チャイルドにすると、前の会話のつづきに追加され、ゲーム内で会話の選択を選択する度に次の会話が表示されます。もう要領はわかりましたか。 それでは、本当になんでも、ちょっと想像力を使って面白い吹き出し、敵との会話や、ヘルプボットを作成してゲームのクエストをより楽しいものにできるといいですね。 私は、小学生、中学生、高校生から大人まで、プログラミングに興味がある方へ、ロブロックスのゲームって簡単で面白いと思ったことをお伝えしています。コードが好きな方や得意な方も←是非、チャンネル登録をして下さい。いいねも押して下さい! ご視聴ありがとうございました。ではまたね。

クライアントとサーバー間の通信:RemoteEvent

今回のコードはこちらを参考にしました。(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