はじめに ── 「また挫折するかも」と思っていた

ゲームを作りたい。
そう思ってから、もう何年も経ちます。その間、何度も挑戦して、何度もやめてきました。Unity も、そのひとつです。少し触っては、難しくて手が止まる。その繰り返しでした。
だから今回も、正直こう思っていました。
「どうせ、また途中でやめるんだろうな」と。
今回作ろうとしたのは、ブラウザで動くブロック崩しです。パソコンでもスマホでも、その場で遊べるゲーム。しかも、このブログに直接置けるものです。
結果から言うと——完成しました。
そして、いちばん驚いたのは、完成したことよりも、「作っている間、あまり怖くなかった」ことでした。
この記事は、その理由についての話です。過去に挫折したことがある人にこそ、読んでほしいと思っています。
そもそも Phaser って何?
今回使ったのは、Phaser(フェイザー) というものです。
「また新しいゲームエンジンか」と思うかもしれません。でも、Unity とは少し違います。ここだけ、先にお伝えします。
Unity は「アプリ」です。 パソコンにインストールして、起動して、画面の上で部品を並べていきます。大きなソフトです。
Phaser は「部品」です。 正確には「ライブラリ」と呼びます。むずかしく聞こえますが、要は「便利な部品のかたまり」のことです。起動する画面はありません。文章(コード)を書いて使います。
たとえるなら、こうです。
- Unity =「工場」。中に入って、機械を操作してモノを作る
- Phaser =「工具箱」。自分の作業台に道具を持ってきて、手で組み立てる
どちらが良い・悪いではありません。ただ、Phaser で作ったものは、そのままブラウザで動きます。 だから、このブログにそのまま置けるのです。
「ブログで、その場で遊べるゲーム」を作りたかった私には、これがぴったりでした。
まずは、遊んでみてください

言葉で説明するより、触ってもらうのが早いです。
下のゲームが、今回作ったブロック崩しです。パソコンならマウスで、スマホなら指で、下のバー(パドル)を左右に動かして遊べます。
▶ 別の画面で大きく遊びたい方はこちら: https://gamelablog.com/games/breakout/
いかがでしょうか。
シンプルですが、ちゃんとブロック崩しです。ボールがブロックに当たって消える。下に落とすとミス。昔からある、あの遊びです。
これが、ダウンロードもインストールもなしで、ブラウザの中でそのまま動いています。 ここが、今回いちばんやりたかったことでした。
本題 ── Unityと、実はそっくりだった

さて、ここからが本当に伝えたい話です。
今回、私はコードを書きながら、その中身を一つずつ見ていきました。「これは何をしているんだろう」と、確認しながら進めたのです。
すると、何度もこう思いました。
「あれ、これ……Unityで見たやつだ」
名前は違います。でも、やっていることが同じなのです。いくつか並べてみます。
① 最初に一度だけ動くところ
Unity には Start()(スタート)という場所があります。ゲームが始まるとき、最初に一度だけ動く場所です。「用意、ドン」の「用意」の部分ですね。
Phaser では、これが create()(クリエイト)という名前でした。役割は、まったく同じです。
② くり返し動き続けるところ
Unity には Update()(アップデート)という場所があります。ゲームが動いている間、ものすごい回数、くり返し動き続ける場所です。1秒間に60回くらい動きます。
キャラクターが動いて見えるのは、この Update が、少しずつ位置をずらして描き直しているからです。パラパラ漫画と同じ仕組みですね。
Phaser では、これも update() という名前でした。まったく同じ考え方です。
③ 「時間のずれ」を合わせるところ
これは少し細かい話です。
パソコンやスマホは、機種によって性能が違います。速い機械と遅い機械があります。何も工夫しないと、速い機械ではボールが速く、遅い機械では遅くなってしまいます。同じゲームなのに、遊ぶ機械で難しさが変わってしまう。これは困ります。
Unity では、これを防ぐために Time.deltaTime(デルタタイム)というものを使います。「前の一枚から、どれくらい時間が経ったか」を教えてくれる数字です。これを使えば、どの機械でも同じ速さにできます。
Phaser にも、まったく同じものがありました。名前は delta(デルタ)です。
表にすると、こうです。
| やっていること | Unity | Phaser |
|---|---|---|
| 最初に一度だけ動く | Start() | create() |
| くり返し動き続ける | Update() | update() |
| 時間のずれを合わせる | Time.deltaTime | delta |
見てのとおりです。
名前が違うだけ。考え方は、まったく同じなのです。
いちばん伝えたいこと ── 知識は、ムダにならない

ここで、私はハッとしました。
Unity を触ったとき、私は途中でやめてしまいました。「難しい」「向いていない」と思って、手を止めました。あのとき覚えたことは、ムダになったと思っていました。
でも、違ったのです。
あのとき覚えた Update の考え方が、今回そのまま役に立ちました。
名前が update に変わっただけ。「くり返し動き続ける場所」という考え方は、そっくりそのまま使えました。deltaTime もそうです。一度わかっていたから、Phaser の delta を見たとき、すぐに「ああ、あれか」とわかりました。
つまり、こういうことです。
エンジンが変わっても、考え方は変わらない。
Unity をやめても、そこで覚えたことは消えていませんでした。ただ、別の場所で「別の名前」として、私を待っていてくれたのです。
だから、もし今、何かに挫折している人がいたら、伝えたいです。
その挫折は、失敗ではありません。
途中でやめても、覚えたことは体に残ります。次に別のものを触ったとき、「あ、これ知ってる」と、きっと助けてくれます。ゼロからのやり直しではないのです。ただ、新しい言い方を覚えるだけ。それだけなのです。
私が今回「怖くなかった」理由は、これでした。知らない世界に飛び込んだつもりが、知っていることばかりだったのです。
おわりに

シンプルなブロック崩しですが、私にとっては大きな一歩でした。「また挫折するかも」と思っていた自分が、ちゃんと完成までたどり着けたからです。
そして、その支えになったのは、過去に挫折して覚えたことでした。ムダだと思っていた経験が、いちばん助けてくれました。
次は、釣りゲームを作ってみようと思っています。また、このブログで遊べるようにするつもりです。できたら、ぜひ触ってみてください。
もし、あなたも過去に何かをあきらめたことがあるなら——
その経験は、きっとどこかで、あなたを待っています。
この記事が、もう一度踏み出すきっかけになれば、うれしいです。
