ゲームプログラミング初心者向けの講習会を開きました!講習会スライドも公開しているのでぜひ読んでみてください!
この講習会はUnityやUEのようないわゆる重たい「ゲームエンジン」は使わず、一般的なプログラミング言語と古典的な「図形描画」「待機処理」などの機能だけを使って簡単なゲームを作ってみるという内容です!開発初心者にも分かりやすいシンプルな開発環境でゲームを作ります!
具体的には、以下の4言語(ライブラリ)をサポートする形で、受講者の皆さんに好きな言語を使って簡単なアクションゲームを開発して頂きました。
どの言語でも基本的に作るモノは同じです。
これ以外の選択肢、例えばDXライブラリやPyxelやPixiJSやプチコンなどであっても、適切に読み替えることで同じ内容を学ぶことができます。
スライド
スライドはこちらにて一般にも公開しています。教科書レベルの基礎的なプログラミング能力があれば十分に学べるように作りました。
traP外の方もぜひ参考にしてください!
ゲームを作ってみたい方のご参考になれば幸いです。
講習会の中身については以上で全てなので、以下では僕がこの講習会を開催するに至った経緯を書き連ねたいと思います。
この講習会の主旨について
traP内におけるゲーム制作の現状
現在traP内のゲーム制作は多くが、というより大半がUnityで行われています[1]。一部C++好きがSiv3Dを使っていたり、ブラウザで動かしたいアプリがPixiJSやThreeJSで作られたりしていますが、メインストリームとは言えません。
それもそのはず。ここ数年の間、新入生向けの実践的なゲーム開発講習会はUnityでしか開かれていなかったのです。つまり、Unity以外でゲームを作っているtraP部員はほぼ他で学んだか、独学の徒ということになります。
現状traPではUnity以外も使える人材、もっと言えば特定のソフトウェアや言語やライブラリに縛られないゲーム開発人材の育成が行われていない。これはよろしくない、けしからんということで今回このような講習会を(独断で)開催しました。
コンセプト1. 小さな道具で小さなものを作る
今どきゲームを作りたいなら、便利で高機能でネットに記事の多い有名なゲームエンジンを使い倒せばいいだろう、という方もいらっしゃるかもしれません。しかし待ってください。意外と思われる方もいるかもしれませんが、この講習会の第一の目的はゲーム開発の敷居を下げることなのです。
Unityなどのゲームエンジンには当然、便利な機能が無数に付いています。その強さは否定しません。しかしそれは重機の強さなのです。
重機を使えば大きな建物も楽に建てることができます。一方で、それらを使うには道具に習熟する必要があり、多くの資源を用意する必要があり、しばしばそのコストは求めている結果に対してあまりにも大げさすぎるのです。
テトリスを作りたいという初心者に、大規模なゲームエンジンをオススメするのは果たして合理的な選択と言えるでしょうか?
ほぼ使わないであろう「シーン」と「アセット」と「ゲームオブジェクト」の概念について初めに学習するのが正しい道のりなのでしょうか?
私には牛刀割鶏としか思えません。
これが例えばProcessingなどであれば、起動してすぐプログラムをパチパチと打ち込むことができます。それだけで何でも動作させることができるのです。わざわざ1分もかけて何十MBもあるプロジェクトファイルを生成する必要はありません。
重機でビルを建てる前に、ノミと槌でおもちゃを作れるようになる。それがこの講習会のコンセプトです。
コンセプト2. 言語やライブラリに依存しない基礎力
世の中にはたくさんのライブラリ、たくさんのフレームワークがあります。高いシェアを持ち多くの人に使われるものもありますし、あまり有名でないものもあります。重要なのは、それらのシェア状況は常に揺れ動くものだということです。
かつて誰もが使っていたライブラリが、数年後(あるいは数か月後、数日後)には人気を無くしていた、あるいは古臭いものになってしまっていた、といったことはソフトウェアの世界ではザラにあります。その中で重要になるのは、使う道具を身軽に乗り換える能力であり、使う道具に依らない基礎力を持っておくことでしょう。
あるフレームワークの使い方を数年かけて熟練したのに、あるときからそれはもう使わないよ、となれば学び直しになってしまいます。持っている知識の多くがその熟練していたフレームワーク独自のものであったりすれば目も当てられません。
無いものは作り、有るものは利用するという力があればどんな環境でも適応できます。
最初に見た大きなものを親と思って付いていくのは鳥のヒナもプログラマも同じです。しかし、鳥の親は自分が死んでもヒナが己の力で生きていけるように鍛えます。プログラミング教育もかくあるべきではないでしょうか。
基礎力の恩恵
話は変わりますが、言語に依存しない基礎があること、もっと言えば「どうせどの言語でもやることは大体同じである」という認識はもうひとつ別の重要な能力に結び付きます。それは、他のプログラミング言語向けに書かれた情報からも知見を得る能力です。
分かっている人には当たり前のことかもしれませんが、アルゴリズムというものは基本的に言語に依存しません。「この言語での正しいやり方」みたいなものがそれぞれ存在している訳ではないのです。ありものの道具で「やりたい処理」をどう書くかということでしかありません。
こうした認知と基礎力があれば、「あっちの言語/フレームワークだったらネット上に記事が沢山あるのに!」などということに泣く必要はなくなります。自分の使いたい言語/フレームワークの上に"翻訳"すれば良いだけだからです。
受講者へ伝えたいこと
ゲーム制作は1つのアートです。思い付きを形にしてこそ意味があります。
絵描きがふとした瞬間に屈みこんで紙と鉛筆を取り出すように、
道端で演奏家が無造作にポケットからハーモニカを取り出すように、
思い付きをその場でスマートに表現できるようになりたくはありませんか。
巨大なフレームワークは作りたいものと合致していれば強力な道具です。しかしあなたの作りたいものは本当にその道具と合致していますか?あなたのアイデアは道具に振り回されてはいませんか?
一度、シンプルな道具を使って「落書き」をしてみましょう。よくあるゲームの「模写」でも構いません。そのようにして感覚を掴み、思いついた大体のものは作れるとなったとき、ゲームという創作の自由度は思った以上に広いことに気付くはずです。
過去にはJavaが一定の勢力を持っていたりしたが、今はそうでもない ↩︎