ゲームクライアント
は、プレイヤーが実際に触れる唯一の部分です。
プレイヤーが見て、聞いて、押すものすべてがここで動きます。選択は「どのエンジンが最良か」の問題ではありません — すべてを得意とするエンジンはありません。自分のゲームがどこで動く必要があるのか、そして自分がすでに何を知っているのか、の問題です。評判ではなく行き先で選びましょう。
何を作るかが、何を選ぶかを決めます
3つを順に問いましょう。プレイヤーはこれをどこで手に入れるのか — リンクか、アプリストアか、デスクトップのストアか。2D か 3D か。そして自分はすでにどの言語を楽に書けるのか。この3つの答えで、たいてい妥当な選択肢はちょうど一つに絞られ、その先は好みの議論です。
最初の なら、Web は人が思うよりずっと多くの場合に勝ちます。インストールするものもなく、審査を受けるものもなく、一時間以内に友達へリンクを送れます。
ゲームは1秒間に何十回も、同じ3つの仕事をくり返します
ブロックが落ちてくるパズルから3Dのレースゲームまで、どのゲームもの上で動いています。クライアントは1秒間に何度も同じ作業を繰り返します。プレイヤーが何を押したかを読み取り、世界を更新し(キャラクターを動かし、当たったかを確かめ、得点を足し)、新しい絵を描きます。ループを1周するたびに、フレームが1枚できあがります。60 なら1周を約16ミリ秒で終えなければならないので、遅いは画面のカクつきとして表れます。
- 1 入力を読む どのキーが押されたままか、指が画面のどこに触れたか、ゲームパッドのどのボタンが押されたかを読み取ります。ここでは読むだけで、まだ何も動かしません。
- 2 世界を更新する キャラクターを「速さ × 経過時間」だけ動かし、重力をかけ、をして、得点とタイマーを変えます。ゲームのルールが住んでいるのはここです。
- 3 絵を描く 画面を消してから、背景・・得点を新しい位置に描きます。プレイヤーが見るのはこの段階だけなので、ゲームのルールはここに入れないでください。
画面の中を動き回る絵 — キャラクター、コイン、弾 — をスプライトと呼びます。2つのスプライトは、目に見えない箱(ヒットボックス)が重なったときに触れたことになり、それを毎フレーム確かめることを当たり判定といいます。Phaser・Godot・Unity のようなエンジンはループを代わりに回してくれるので、あなたは更新の段階で何が起こるかと、何を描くかを書き込むだけです。
x += speed * dt。そうすれば、どの端末でもみんな同じ速さで動きます。
ループのどの部分の話なのかを に伝えましょう。たとえば「更新では、デルタタイムを使ってプレイヤーを矢印キーで毎秒200ピクセル動かして、壁で止めて。描画では、得点を左上に表示して。」のように頼みます。段階の名前を言うと、小さくて確かめやすいコードが返ってきます。
ウェブ
リンクは、ゲームとプレイヤーの間の最短距離です。インストールもストア審査もなく、ブラウザがあるすべての端末で動きます。
モバイルアプリ
ストア配信・プッシュ通知・アプリ内課金を得る代わりに、審査待ちとプラットフォームのルールを受け入れます。
デスクトップ
より大きな画面、本格的な入力機器、そして Steam。長く遊ぶゲームが住む場所です。
よく間違われる2つのこと
Babylon.js・Unity・Unreal・Flame は知っておく価値があるものとしてここに挙げているだけで、SONUB が採用した技術ではありません。