![見出し画像](https://assets.st-note.com/production/uploads/images/94784885/rectangle_large_type_2_bd44588bad5f7acf1a6896dfd6a0bb67.png?width=1200)
C++向けゲーム開発用フレームワーク「MGL」公開
軽く自己紹介
noteユーザーの皆様初めまして.今回が初投稿なので,本題の前に軽く自己紹介をしておきましょう.
私はAcerola Software(または単にAcerola)という名義で活動しているゲーム開発者です.元々はWebサイトで細々と活動していたのですが,事務的なお知らせと雑多な記事の混同を避けるためにこちらへと引っ越してきた次第です.
宣伝ついでにSteamのクリエイターホームページのリンクも載せておきますね.後述するMGLが実際に使用された例でもあります.
ゲーム開発用フレームワーク「MGL」
さて,本題に入りましょう.今回お知らせしたい事は,私がゲーム開発用に作成したフレームワーク「MGL」を無償公開しましたよ,という事です.
MGLはC++(C++17以降)向けのフレームワークです.最近では「ゲームエンジン」と呼ばれている類のものですが,多くの方が想像するそれとは少々異なるコンセプトで作られています.
MGLはゲームプログラミングに特化しており,ゲームに必要な機能の多くを面倒な手続きなしに利用可能です.標準での対応プラットフォームは,Windows,macOS,iOS/iPadOS,そしてtvOSです.
ライセンスはzlibライセンスで,各プラットフォーム向けの公式なSDK以外には依存していません.また,一部のソースコードとドキュメント内のサンプルコードについては,実質パブリックドメインであるCC0 1.0となっています.開発者にとって負担の少ないライセンスになっていると思います.
どんな特徴?
標準構成でも2Dゲームの開発に必要な機能を一通り備えていますが,特徴はそれだけではありません.MGLは扱いやすさと同じくらい「拡張性」を重視して作られており,不足している機能を簡単に補える仕組みを備えています.
と,言われてもピンと来ないと思いますので,もうちょっと具体例を挙げて紹介しましょう.
MGLは標準で2D描画機能を備えていますが,3D描画機能は備えていません.しかし,使用するレンダラは差し替えが可能な作りになっています.もしユーザーが独自に3Dレンダラを用意できるならば,MGLの他の機能を引き継ぎつつ3Dゲームの作成も可能になります.また,MGLの2Dレンダラの要件を満たすことで,MGLが備える2D描画APIのバックエンドとしても利用可能です.
このような機能拡張の仕組みはレンダラだけでなく,プラットフォームに依存するもの全般が備えています.オーディオ再生,ユーザー入力,ファイルアクセス,システムへのアクセスなどなど.もしこれらを一通り準備できるのであれば,MGLが標準では対応していないプラットフォームへの移植も可能となります.
機能拡張の仕組みは,応用次第で色々と面白いことができます.例えば,音声ファイルの代わりに音源エミュレータを実装して,BGMをPSGやFM音源で鳴らすといったことも可能です.あるいは,ファイルアクセスを特殊化することで,独自形式のアーカイブファイルをマウントして通常ファイルとして扱えるようにもできます.
そして,これが最も重要な要素ですが,これらのカスタマイズはMGLのソースコードやビルド設定に手を加える必要はありません.追加したい機能は実行時にMGLに登録して使用します.もし作るゲームによって欲しい機能が異なるとしても,作るゲームの数だけカスタムしたMGLを用意する必要はありません.MGL向けの拡張機能の総称を「エクステンション」と呼んでおり,これをプロジェクトに追加してMGLへと登録することで有効化されます.
残念ながら現時点ではエクステンションを準備できていませんが,近い将来いくつか公開する予定です.もちろん,自作するという選択肢もあります.
なぜ今更MGLなのか?
おそらく,ここまで読んでくれた人の多くが共通の疑問点を抱いていると思います.
「UnityやUnreal Engineでいいじゃん.しかも今時C++って……」
実際のところ,その通りです.ここ近年のゲームエンジンの進化には目を見張るものがあり,ゲーム開発の手法を大きく変化させました.今日主流のエンジンに比べると,MGLはやや古風なシステムと言えるでしょう.
それでもMGLを作成し,公開までに至った理由は様々です.目的ありきの理由もあれば,成り行きでそうなった面もあります.そんな多くの理由の中から1つ選択するならば,「個人の手の内に収まる道具が欲しかった」からです.
MGLは全てを用意はできないし,大量の機能を詰め込む予定もありません.その代わりに,機能拡張という解決手段を用意しています.そこにユーザーの欲しいものを追加することによって,MGLはその人にとって使い心地の良い道具になる,というのがMGLの目標とするところです.
私はこの「少し足りないが,自力で補える」という距離感にはある種の可能性を見いだしています.自分のスキル次第でどうにでもできるし,どうにかしている過程で自分のスキルも向上するでしょう.一個人が普段使いするには丁度良い気がしませんか?
そして,その動機や内容が何であれ,活動の成果を公開して共有することには一定の意味があるものと考えています.多くの人には無意味であっても,活動しているという事実があればその界隈の活気へと繋がるのではないでしょうか.
とりあえず,MGLとかいう変なのを作ってる奴がいるとだけ認識して貰えれば幸いです.
MGL,いかがですか?
MGLのようなソフトウェアは使われなければ育たず,一方で育ってなければ使われないという性質があります.私自身はMGLを用いてゲームを作っているものの,慢性的な栄養不足であることは否めません.
もしMGLに興味を持って頂けたのであれば,試しにちょっと探りを入れてみてはいかがでしょうか.実際に使用するまではせずとも,ドキュメントにちらっと目を通すだけでも雰囲気は掴めるかと思います.
正直なところ,今はまだ実装・ドキュメント共に本格的な開発に導入できるレベルに達していませんが,どんなに些細なフィードバックでも貴重な養分となります.
質問や意見,不具合報告のためにDiscordサーバを用意しました.情報提供の目的も兼ねているため発言は必須ではありません.読むだけの利用も大歓迎ですので,お気軽にご活用ください.
Discordサーバによる運用が適切かどうかについては再考の余地があるのですが,当面はこちらで様子見させてください.
なお,当面は誰も来ないことが予想されるため,x年前のこの記事を読んでメンバーが私一人だったという可能性も十分にあり得ます.それは不具合でもタイムスリップでもありませんのでご安心ください.
もちろん,この投稿のコメント欄に書いていただいても構いませんよ.
その他
後先考えずにnoteのアカウント取得して投稿してみましたが,実は今後どんなことを投稿するかは何も考えていません.当面はMGLやゲーム開発関連であれこれ書いていくかと思います.やや中途半端な状態でのリリースとなった理由とか,GitHubで公開する予定だったのに急遽変更になった理由とか,書けそうなネタはいくつか抱えています.
また,再度宣伝になってしまいますが,もし興味があればSteamで配信しているゲームもよろしくお願いします.特に「ぺぐそり+」にはMGLの初期バージョンが使用されており,プレイされる数が増えれば問題があっても無くてもMGLにとっての貴重なデータとなります.
理想はたくさん売れて次回作へと繋げ,再びMGLを実戦投入することでさらに成長させる事だったのですが……「ぺぐそり+」のSteamDBのデータ見る?すごいよ.