日本の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にカーソルを合わせて、+ ボタンをクリックします。[スクリプト] を選択し、クリックして開きます。 次に、スクリプトにコードを配置する必要があります。以下のコードをコピーして貼り付けることができます。 スクリプトをコピーして貼り付けた後、プログラムをテストして実行してください。

翻訳されたゲームの作成

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のゲーム開発は、それこそ国際配信ができる優れたツールでもあるので、機会があれば試して頂きたいと思います。 「チャレンジへの耐性がつく」 とはいえ、プログラムやゲーム開発はゲームプレイよりもチャレンジです。その為、学習する過程でチャレンジ精神と忍耐がつくという利点があります。ゲームプレイはゴールに達成するために、試行錯誤を何度もくり返しレベルアップしていきます。プログラムも同様に、繰り返しは、一つ一つの問題が上手く動くか試してみて、その度に動くまで繰り返しコードを変えていきます。プログラマーさんはプログラムを書いて最初から成功するということはありません。一つ一つを上手く動くかテストしていきますし、そうでないと先に進めないので、このチャレンジ精神は、開発を通じて身につく力だと思います。 「プログラムの世界は全てに通じる」 これからの時代は、テクノロジーができることが主流になります。現在、子供の世界でゲームをまったくやらないで生きていくのは非常に難しいと思います。それは冒頭にも述べた通りです。それではプログラミングの世界はどうでしょうか。今後、プログラミングができれば、「ものごとを考える方法」すなわち、論理的な思考ができるようになります。これは一つの例ではありますが、スピードが増す複雑な情報社会の中で、必要なものを正確に捉えることができるマインド、ストレスを和らげ生きやすくしてくれることに繋がります。プログラムをまったくやらずに子どもの世界を生きていくというのは、ゲームをやらずに生きていく以上に、きっと非常に難しいことになると思います。お子様の為にも、焦らず、今、出来る事から始め、大学生になるまでに、コンピューターサイエンスの基礎が身につく準備をしていけば良いと思います。 「ゲームで遊ぶからゲーム開発へ」は、テクノロジーの世界の冒険の始まりと言うよりも、もっと現実味のある未来への確実な一歩にしていきましょう。プログラミングのお教室で、お子様が生き生きとテクノロジーを学ぶ喜びを感じられることを願っています。

レーザービームのレンダリング

#68 CFrame()を使ったポジションと方向の割出し こんにちは。前回の動画 (#67) で銃を作成しました。今日はその銃からビームを出す方法を話していきたいと思います。今現在の状態の説明をしますと、マウスでターゲットとする敵を一回クリックするとアウトプットに「相手をヒットしました」と表示される状態になっています。なので今日は、この銃からレーザービームを発射ができるCFrameについて触れていきましょう。もちろん銃の連射というのもコードを追加することで可能です。でもここでは、一回のクリックで一回のビームがでる方法を学びます。 先ず ModuleScript を使用します。モジュールスクリプトの中で書いたコードは、どこでも使用できますが、この関数のコピーを複数持つことは、その動作を変更する必要があるときに大変なことがあるので、したがって、ModuleScriptsで関数は、ScriptsとLocalScriptsでModuleScriptsを呼び出すrequireが必要とあります。 フォルダーのStarterPlayerの下のStarterPlayerScriptsの中にこれを作成し、名前をLaserRendererと変更して、で、その中にSHOT_DURATIONという名前の変数を宣言していきます。Durationというのは期間という意味ですから、これはレーザーが見える時間(秒単位)を指定したということだと想像できますね。関数を作成しますが、モジュールスクリプトで書く関数の書き方はモジュールスクリプトの名前、その後にドットで単語を続けてそして関数の名前となります。この関数の中で、銃の引き金を引いてビームを発射するビームを作るという訳です。 プレイヤーの持つレーザーブラスターの位置はtoolHandleで取得して、toolHandle をドットでPositionの単語と繋げてstartPositionという名前の変数を宣言します。 LaserDistanceという名前の変数を宣言して、ここでパラーメータの引数のendPositionからstartPositionの2つの値のベクトルの差を求めます。これにMagnitudeプロパティを使用して、レーザービームの長さ(大きさ)を取得します。 さて、今回の注目点は、laserCFrameという変数を宣言した後に、CFrame.lookAtのコンストラクターを使用しています。コンストラクターはビームを発射させるためにコンピューターに手続きをすると考えてください。ここでの手続きの内容は、レーザービームの位置、そしてレーザービームの方向を決めています。 Robloxゲームの世界では、位置(0、0、0)はゲームの中心にあります。「正面」方向は常に負のZ方向であり、「右」方向は常に正のX方向です。パーツのPositionプロパティは、常にワールドスペースでの位置を参照し、絶対位置とも呼ばれます。 コード内の位置データを操作する場合、最初に位置と方向を最初にワールド空間に変換すると非常に便利です。今後遭遇する幾何学の問題を解決するための基礎としてそれを使用してください! lookAtのZ軸をlaserDistanceの半分の長さを取得するのに、負の値を掛け、半分に割ることで中点を取得し格納するという役目をしています。 レーザービームのプロパティーをセットします。LaserPartをInstanceで作成した後に、サイズ、色、マテリアル等が設定されています。そして最後に、パーツをDebrisサービスに追加することで、(デブリは瓦礫ということですから)それをSHOT_DURATION変数の秒数の後にレーザービームが削除されるようにします。 これで、レーザービームをレンダリングする関数が完成しましたので、ここから、ToolControllerにいって、この関数をToolControllerから呼び出すことをしていきます。 ToolControllerスクリプトの上部で、LaserRendererという名前の変数を宣言します。 fireWeapon関数の下部でLaserRenderer関数を呼び出します。 再生ボタンをクリックして武器をテストします。ツールがアクティブになると、武器とマウスの間にレーザービームが見えるはずです。 ここまでできたらほぼ出来上がっています。今日の内容のコードはこちらを参考にしました。コードをコピペされる場合はこちらをクリックして下さいね。 武器のコントールのコードについては動画には載せていませんが、プレイヤーが短時間で多くのダメージを敵に対して与えるのを防ぐために、各ショットの間に遅延を用いて、クリックの速度に関係なく、各ショットの間に短い遅れをとるゲームのコントロールをすると促しています。これはRobloxで自分のゲームを作成される時にこういった細かいところで制御する方法が大切だということでしょう。 Robloxのサイトは、素晴らしい知識と探求の楽しみがいっぱいですね。皆さんはいかがでしか。本日は有難うございました。 良いコードの書き方というのは新しい機能を追加しても、エラーが出ない優れたロジックから成り立っているものだと思います。もちろんそれをする為には常にコードの書き方が一致した内容でコードが書かれてないと読み難い、結果、理解もできないとなりますよね。RobloxのDeveloperサイトでは、その様な書き方を正しくちゃんとしています。それによって、慣れてきたときには既に素晴らしロジックを身についているでしょう。 シリーズの動画 #64:Roblox ゲーム内で使用する銃の作り方 #65:Roblox ゲーム内で使用する銃の効果音のスクリプト #66:衝突を見つけるためのレイキャスティング #67:レイキャストが武器を発射:プレイヤーと誤って衝突しないようにする その他参考にしたサイト Weapons Kit NPC Kit CFrameを理解する Object and World Space

ゲーム色が変わるコード

Lua言語は、RobloxやCoreのゲームクリエーションプラットホームに使用されています。少しずつでも、コードに慣れていくのが目的で、このTargetのコマンドを紹介しようと思いました。マウスをクリックする度に、プレイトの反応をみて下さい。Robloxのゲームを作成するときに、こんな面白いことが起きてもいいのではないかと思うかもしれません。 さて、Robloxスタジオは開きましたか? カラーランダマイザーツール・Color Randomizer Tool プレーヤーのバックパックに、次のコードサンプルを配置するとStarterPlayerScriptsと、ツールが作成されます。このツールを装備すると、プレーヤーがBasePartをクリックするたびにBasePart.BrickColorツールが変更されます。 では、これをスタジオで実行して見てください。 ホットバー、Toolが表示されますね。Toolをクリックし、ベースをクリックすると、あらあら不思議?色がどんどん変化しますね。 ここで注目するのは? 7行目:ToolのHandleがFalseに設定されています。 実際にStarterPackにツールを作って、Handleオブジェを入れた状態でこのプログラムが実行できるかどうか、考えてみてね。

RemoteEvents:Client to Server 2

ゲーム内で武器を使って相手を攻撃する方法 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に到達するまでイベントを生じることをしています。この関数は、剣が相手のプレーヤーに触れる度に呼ばれ、相手がダメージを受けている処理を行ってくれます。そしてそれは、サーバー上のすべてのユーザーがその変更を知ることができるようになっています。 動画では、「Roblox Studio」 にて武器を作って相手に攻撃をしダメージを与える一連のコードの構成をまとめましたので、どうぞご参考にされて下さい。 動画も含め、以上の内容が理解できると、ゲーム開発の第一突破口となればと願います!

RemoteEvents:Client to Server

Level : Robloxのレッスン1〜4を終了したレベル 今回は、Robloxのリモートイベントを使用し、クライアントからサーバーに通信する方法を学習していきましょう。これはRobloxでのマルチプレイヤーゲームの一般的な機能を理解できるコードの書き方になります。 リモートイベントというのは、クライアントー>サーバーに通信するとき使用します。サーバーはインターネットで繋がっている大きな強力なRobloxコンピューターで、クライアントは、パーソナルコンピューター、携帯、タブレット、またはゲームコンソールです。 クライアントが、サーバーと通信するには、リモートイベントとリモートファンクションの2つのリモートのどちらかを使用します。 リモートイベントは、one-way communicationというデザインがなされていて、リモートファンクションはtwo-way communicationというデザインで構成されています。 リモートイベントには4つの使用方法があって、それぞれ情報の送信の仕方が目的によって異なります。 今回は、リモートイベントのクライアント→サーバーの通信方法を使用していきます。 この方法は、例えば、ユーザーがロブロックスのゲームを実行し、キーボードの ” e ” を押した時、新しく作成されたパーツがサーバー上のすべてのユーザーの画面に表示されるようになります。 その他のリモートイベントとリモートファンクションの使用方法は、…今のところは、リンク先からご参考にされて下さい。 下記リンク先のステップは、Robloxスタジオのインターフェイスを学習します。なんでも最初は真似してみましょう。このステップをやってプログラムが上手く走ると、サーバーと通信してパーツを表示することができます。 Robloxのサイト:Remote Functions and Events Using Remote Events(2ステップ) Client toSeverを行って下さい。(3ステップ) 上記の内容のステップができたら、実際にパーツが作成されるかどうかテストをしましょう。

Python「正多角形」プロジェクト

Level:初心者(PythonのBasicsのレッスン1と2が終了したレベルです) 前書き このプロジェクトでは、「辺の長さが全て等しく,角の大きさも全て等しい」という正多角形の性質を使って図形を描きます。このプログラムは、一連の動きを特定の回数だけ実行し図形を描く方法を考えます。さらに再利用可能な一連の操作は、色々な図形に活用できる様にプログラムを構成していきます。 ルール:コンピューターは、何角形の図形を描きたいかを聞きます。次に、その図形の一辺の長さを聞きます。一辺の長さはピクセルで表します。 ここをクリックすると正多角形(正方形、正三角形、正六角形等)が描けます。 1. 1つ目の質問 このTrinketを開きます。:https://bit.ly/3pW12yJ コード1行目にこのプロジェクトで使用する亀のモジュールがすでにインポートされています。 import turtle 3行目は、printステートメントでプログラムの目的を表示します。 print(‘亀が図形を描きます。’) 4行目は、プレーヤーに図形の辺の数値を入力してもらいます。変数名のsideは、英語で一辺のことを表します。プレーヤーが入力した数字を変数に保持しています。 では、ここからTrinketの Remixボタン を押して、登録アカウントを作成、書いたコードをセーブしていきましょう。Remixしないと保存できませんが、コードを書くことはできます。 次にプレーヤーが整数以外の数字を入力した場合のために、intを使い全ての入力が整数になるようにします。 side = int(side) クイズ!プレーヤーが入力した数字を出力するにはどうしますか。 print(‘side’) print(side) print() 答えはこちらです。 2番のprint(side)でした!プログラムにコードを書いて、数字が出力されるか試して下さいね。