Robloxでゲーム開発してみて「Robloxすごいじゃん」って感じたことを振り返る
Robloxではじめてガチンコゲーム開発してみました。
その上で「Robloxすごいじゃん」って感じたことを振り返ります。
ちなみに作ったゲームはこちら↓、DEVLOXさん主催のRobloxのゲームコンテストで「HOUSE」をテーマにした作品募集で、作ってみたゲームです。
(よかったら遊んでみて下さいっ)
すごいこと①:オンラインゲーム開発用のゲームエンジン
Robloxの開発環境である「Roblox Studio」は、「オンラインゲーム開発環境(ゲーム開発エンジン)」です。
これ、Robloxがオンゲーなので当たり前なことのようですが、オンラインゲーム開発用ゲームエンジン、って僕の知る限り他にないんですよね。
オンラインゲーム(Server/Clientモデル)で作る前提となっているため、オンラインゲーム制作のための様々な要素がすでに組み込まれてます。
それらが、簡単なScript記述で使えるように抽象化されてたり、用途ごとの配置や実行ルールもなるほどな構成になってます。
例えば、サーバークライアント通信系の処理なんかはRemoteEventでかなり簡単に実装できたり。
サーバー/クライントのリソースの配置ルールなら、
- ServerStorage : サーバーのみで使う出し入れするリソース
- ReplicatedStorage : クライアントでも使用するリソース(ここに置くとClientに複製される)
- ServerScriptService : サーバープログラムおけば勝手に走り出す
- StarterPlayerScript : クライントプログラムおけば勝手に走り出す
など、サーバー、クライアントそれぞれのための、コンテナ、サービスってのが用意されてたりと。
実際にマルチのオンゲー作ってみて、オンラインゲームがかなり手軽に実装できちゃうフレームワークになってるなと感じたのでした。
すごいこと②:すべてがInstance、すべてがツリー階層
RobloxではあらゆるObject(WorkSpaceツリーにいるようなものすべて)がInstance。
Part、Model、Texture、Sound、Playerなどもそうですし、ScriptもInstanceだったりします。
Instanceは、ParentやChildrenをもち、DescendantsやAncestorsをたどることができ、また、Cloneしたり、Destroyしたりもできます。
つまりは、すべてが親子関係をもち、すべてが複製・破棄ができ、それらを同じ操作でできるようになっています。
これで驚くのが、この階層関係や、複製操作等にはほとんど制約がなく、なんでも自由に構成していくことができるということ。
- Partの下にScriptをつけて、Script.ParentでPartを参照して動かす
- Scriptの下にPartをつけて、Script:GetChildren()でPartを参照して動かす(↑の逆)
- ScriptをあらかじめPart配下においておいて、自動でScriptを走らせる
- Scriptを複製して、任意のPartの下にくっつけて、任意タイミングからScript走らせる
など、Scriptとその対象に対しての構成(親子関係)に制約もなければ、Scriptをどれにいつから走らせるかといった制約もない。
どうツリーを構成して、どう辿って、いつから、どうプログラムを動かすか、まで全部自由なんです。
自由というというと響きがいい気もしますが、お任せです、作り手次第です。
この制約のないなんでもありの構成ルールには驚きましたが、
ある意味ものすごくシンプルなルールになっていて、子供や初学者にとって直感的で理解がしやすい構成ともいえます。
だって、ワークスペースでツリー開いたらその通りにScriptでもドットで辿ってなんにでもアクセスできちゃうんです。
ワークスペースのツリー構成がもろとも、プログラムでのオブジェクトへのアクセス手順そのものなんです。
驚きと感心とともに、効率的・保守的な開発にはセンスいるな・・と思ったのでした。
すごいこと③:簡単なモデリングやConstrainsができる
Robloxではパーツというプリミティブなシェイプを、合成(Union)や反転(Negate)することで、メッシュを作らずとも簡単なモデルが作成できます。
(引用:公式 Building Unique 3D Objects)
例えば↑のようなものなら、Studio上で簡単に作れます。
Robloxの特性上、比較的ローポリな世界観で構成されることが多いため、このプリミティブパーツの合成で、ゲームに必要なオブジェクトが済んでしまうことも結構あります。
今回作成した、Housing Villageの家も細かい家具系をのぞいて、外枠などはほとんどがプリミティブとその合成からできています。
おかげで、簡単に、土台、柱、壁、床、天井、みたいなパーツ分けができているともいえます(壁などには窓やドア用の穴を空けたりもしつつ)。
これをいちいちDCCツールで作らなくて済むのは大きいですし、子どもや初学者が好きなオブジェクトを形作ったゲームを作りやすいのが、とても良いと思いました。
ちなみに、オブジェクトをどう構成するかでいうと、Constraints↑も豊富かつ簡単に利用できるようになってます。
形状を組み合わせていろいろな動きを作れます。今回だとドアの開閉などを作ったりしました。
すごいこと④:アセットが利用しやすい
他の人が作ったアセットがめちゃ簡単に利用できます。
↑の画像のようにツールボックスというStudio組み込みUI上で、アセットを検索、追加、ゲームに配置まで、すぐできます。
エンジンでのアセット利用といえば、UnityやUEでのアセットストアのイメージですが、ブラウザでストア見て、購入決定してImport、とかの手間がないです。
基本全部無料?だからなのかもしれないですが、かなりアセットの検索・組み込みフローが簡単で利用しやすいです。
ただ、アセット公開に関してはかなりゆるく、著作権ガン無視なものとかもでてきたりするので、そうゆうのに注意が必要です。
すごいこと⑤:ゲームを動かすまでめちゃ簡単
Robloxは、レゴみたいなキャラが3Dで動くゲーム、というのが通常のベースとして決まっているため、最初にゲームを動かすまでがめちゃ簡単です。
他ゲームエンジンでもComponentつければいいだけとか、テンプレートのプロジェクト使えばいい、とか手軽には手軽なんですが、
それすらも必要なく、Robloxではとりあえず実行すると、本当に何もないプロジェクトだろうと、すぐにキャラクターが動く、ジャンプする、落下する、コリジョンに当たる、という動作が行なえます。
これは子どもや初学者が学習したりする際のハードルの低さを実現しているな、と感じます。
ゲームプログラム初学者にとっては、ComponentやらRigidBodyやらSkeletalMeshやらいわれても、拒絶反応がでやすい単語ともいえます。
そういったことも最初に意識の必要ない敷居の低さもあって、多くの子ども含めたの開発者の広がりにもつながっているように感じました。
すごいこと⑥:開発から公開までがめちゃ簡単
開発から公開までもめちゃ簡単です。
Robloxはプラットフォームでもあるので「Robloxに公開!」って設定するだけで、もうみんなに遊んでもらえます。
Roblox Studio上で公開設定も完了するので、ブラウザ行ったりきたりすることもなくサクッと設定も完了します。
オンラインゲームなのに、サーバー代や通信費用もかかりませんし、サーバーの細かい設定とかもいりません。
「スマホで出力するには、XCode入れましょう、Apple/GoogleのDevelopper登録しましょう」とかもないです(当然課金も不要)。
ゲームのURLさえ共有すれば、RobloxのアプリがPCだろうとスマホだろうと立ち上がり、ゲーム開始できるので、他の人にも遊んでもらいやすいです(いちいちDLとかインストールとかがほぼない)。
そんなわけで、世に出す、知り合いに遊んでもらう、までがめちゃ簡単&コストなし、という驚きを受けました。
まとめ:舐めてたけどいい開発環境だ
そんなわけで、Robloxゲーム開発してみて、思ったことの振り返りでした。
プログラム実装についての細かいことは色々ありまして、それはそれで別記事にします。
正直、Roblox開発を実際に始める前は、かなり舐めてました。
やっぱり現代のハイエンドゲームからすると、グラフィックでいえばしょぼく感じますし(というか実際しょぼい)、
配信でもふざけたゲームや粗い作りのものが多く、大したものは作れないお遊び環境なんじゃないの?という疑念すらありました。
けど、やってみたら全然違いました、むしろこれが一番現代的なゲーム開発環境か?と思い知ったくらいの感じです。
もはやネットワークありき当然の時代ですし、開発への敷居も低く、間口も広く、リリースもしやすいってことで。
そんなわけで今後もRoblox開発していったり、子どもたちに作り方教えていったり、お仕事受けたりもしたいとも思っております。
よかったら、Roblox処女作↓、遊んだり、フォローしたり、いいねしたりしてくれると泣いて喜びます!
Twitterでも紹介しております
Discussion
roblox良いですね、youtuberが良く遊んでたりして気になっていました。
グラフィックに関してはマイクラが流行ってるので全然気にならないですし、うちの娘にでもやらせてみたいです。