Unityで挫折した私が、Phaserでブロック崩しを完成させた話〜あのとき覚えた Update は、ムダじゃなかった〜

深宇宙に浮かぶレトロなブロック崩しゲーム。赤・橙・黄・緑・青のカラフルに輝くブロックが整然と並び、小さな光るボールが跳ね回り、下部にはパドルが配置されている。
目次

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

ゲームを作りたい。

そう思ってから、もう何年も経ちます。その間、何度も挑戦して、何度もやめてきました。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(デルタ)です。

表にすると、こうです。

やっていることUnityPhaser
最初に一度だけ動くStart()create()
くり返し動き続けるUpdate()update()
時間のずれを合わせるTime.deltaTimedelta

見てのとおりです。

名前が違うだけ。考え方は、まったく同じなのです。

いちばん伝えたいこと ── 知識は、ムダにならない

ここで、私はハッとしました。

Unity を触ったとき、私は途中でやめてしまいました。「難しい」「向いていない」と思って、手を止めました。あのとき覚えたことは、ムダになったと思っていました。

でも、違ったのです。

あのとき覚えた Update の考え方が、今回そのまま役に立ちました。

名前が update に変わっただけ。「くり返し動き続ける場所」という考え方は、そっくりそのまま使えました。deltaTime もそうです。一度わかっていたから、Phaser の delta を見たとき、すぐに「ああ、あれか」とわかりました。

つまり、こういうことです。

エンジンが変わっても、考え方は変わらない。

Unity をやめても、そこで覚えたことは消えていませんでした。ただ、別の場所で「別の名前」として、私を待っていてくれたのです。

だから、もし今、何かに挫折している人がいたら、伝えたいです。

その挫折は、失敗ではありません。

途中でやめても、覚えたことは体に残ります。次に別のものを触ったとき、「あ、これ知ってる」と、きっと助けてくれます。ゼロからのやり直しではないのです。ただ、新しい言い方を覚えるだけ。それだけなのです。

私が今回「怖くなかった」理由は、これでした。知らない世界に飛び込んだつもりが、知っていることばかりだったのです。

おわりに

シンプルなブロック崩しですが、私にとっては大きな一歩でした。「また挫折するかも」と思っていた自分が、ちゃんと完成までたどり着けたからです。

そして、その支えになったのは、過去に挫折して覚えたことでした。ムダだと思っていた経験が、いちばん助けてくれました。

次は、釣りゲームを作ってみようと思っています。また、このブログで遊べるようにするつもりです。できたら、ぜひ触ってみてください。

もし、あなたも過去に何かをあきらめたことがあるなら——

その経験は、きっとどこかで、あなたを待っています。

この記事が、もう一度踏み出すきっかけになれば、うれしいです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次