【インターンシップ発動編2期生】まずはα版完成を目標に

こんにちは。
お久しぶりとなります。プログラマー志望の杉川です。
インターンシップが始まりまして、4週間目です。
現在、私たちがどのようなことをしているのか、ブログを見てくださっている皆さんにお伝えします。

α版に向けての作業

「α版」とは、
どのように遊ぶゲームなのか、どのような面白さがあるゲームなのかが
分かるところまで制作した状態のことを言います。

私達は現在、そのα版の完成を目標に日々頑張っています。
予定では今週金曜日が、α版の完成となっています。

しかし、ただ「α版をつくる」という漠然とした目標では、何をするべきかはっきりしません。

まずはチーム全員で「α版でやりたいこと」を出していき、
それに向けて何をするべきかをはっきりさせました。

その上で作業の見積もりや、誰が作業を担当するのかといったことを、
前回の中尾さんのブログにもありました通り、スケジュールとして考えます。

そして現在、そのスケジュールをもとにα版へ向けてゲームをつくっている真っ最中です。
その中でも今回はプログラマーの作業を紹介しようと思います。

プログラマーの作業の分担

プログラマーの作業は、キャラクターや物を動かすだけでなく、
画面にキャラクターを表示したり、タイトル画面やポーズ画面などを画面に表示させるところも手がけます。

今回の発動編第2期のプログラマー志望は、私と中尾さんの2人です。
現在α版に向けて、下記のとおり作業分担を行いました。

【杉川(私)】
・ゲームの基盤となるシステム関係をつくる。
・キャラクターなどの物体同士の当たり判定をつくる。
・ゲームに表示する物などを描画するプログラムをつくる。

【中尾さん】
・プレイヤーが、走ったりボールを投げたり、ワープをするといったプレイヤーアクションをつくる。
・ボールが放物線を描いたり、跳ねたりするようにボールの動作をつくる。

まずはα版ではこのゲームでの基盤となる、ボールを投げたりワープをするといった、
基本的な動作
などをできるだけ積み込んでいきたいと思います。

プレイヤーやボールの動きをつくる前に

アクションゲームといえば、キャラクターが動いたり、戦ったりしますが
私達がつくろうとしているゲームには、
■ プレイヤーがボールを投げたり、ワープする。
■ ボールが放物線を描いたり、跳ねたりする。

といった動作があります。

しかし、そういった動作を行うにはまず「当たり判定」というものが必要になります。

「当たり判定」とは、例えば、キャラクターが攻撃するときに敵に剣を振って、
「剣が敵に触れたかどうか」を調べるときに使います。

重力があれば、キャラクターが地面に立つために地面との当たり判定が必要ですし、
キャラクターが移動するときに、敵や壁にぶつかるためにも当たり判定は必要なのです。

もし地面や壁と当たらなかったら、キャラクターは本来止まるべき場所で止まらずに、
下図のようにすり抜けてしまいます。
▲すり抜けてしまった図(キャラクターは私たちが制作しているゲーム『ワープヒーロー』の主人公です)

ではどうやって判定を行っているのか。

当たり判定にもいろいろな種類がありますが、今回は
プレイヤーや敵を球で囲んであげて当たり判定をとる例を紹介します。。
▲プレイヤーと敵の当たり判定の例。

上記のように、プレイヤーや敵を球で囲んであげて、当たり判定をとります。
(2Dのゲームなら円同士、3Dのゲームなら球同士の当たり判定となります。)

もちろんゲームをしているときには、遊んでいる人には囲んでいる球は見えません。
なので遊んでいる人にはこの球ではなく、あたかもプレイヤーと敵が当たっているように見えるわけです。

しかし、実際に作ってみるとうまく壁に当たらなかったり、不自然な当たり方になったりしました。

キャラクターやボールがステージと当たるときの判定の設定や処理が間違っていたりしたためです。

正しいと思ったプログラムでも気付けない間違いがあり、
誤った動作をすることがある
ので、
実際にゲームを動かして様々なパターンをひたすらチェックします。
▲不具合をチェックしています。

当たり判定がしっかりできていると、ゲームを動かしている人が気持ちよく遊べると思いますので、
ただつくるだけでなく自分が遊ぶ人の気持ちになって、
しっかりとつくっていきたいと思います。

お互いが協力する

インターンシップのゲームプログラムは1人でつくるわけではありません。
私と中尾さんの2人の作業がうまく噛み合わなければなりません。

先ほどの当たり判定の処理を使ってプレイヤーの動作や、ボールの動作をつくり上げていきますが、
私の当たり判定の処理がしっかりできていないと、中尾さんはキャラクターの動作や、ボールの動作をつくる作業ができません。

こまめにお互いのプログラムの作業を確認しあって、どういった処理が必要なのかなどを話し合います。

また、プログラムの作業をするに当たって、分からないところがあればお互い教えあったり、
意見を出し合ったりもします。

▲お互い分からないところを教えあったりしています。

また、私はゲーム上に物を表示するためのプログラムも担当していますので、
アーティスト志望の内木さんも意見を出しやすいように、
ゲームの見た目を早めに確認できるようにプログラムを作っています。

例えば、キャラクターの見た目をチェックするためのプログラムを別に作ったり、
内木さんからいただいた素材をすぐにゲームに反映させて、いち早くゲーム上で素材を確認できるようにしています。

こうすることで、作っていた素材がゲーム上ではどう動くのかすぐにチェックできますし、
思っていたとおりに表示されているかなどがチェックできます。

チェックをしたときに、思ったとおりに表示されていなかったり、こういうように表示してほしいというのがあれば
すぐに私が修正を行います。

インターンシップ生全員がスムーズに作業ができるよう、
お互い心がけて作業をしています。

おわりに

ついに6月となり、インターンシップの期間も残るところ約1ヶ月です。

残りの期間少なくなってきましたが、最後までインターンシップ生全員で
力を合わせて頑張っていきます!